0

I am currently reading values in a configuration file and setting the values to a view model. I am displaying them on the UI in textboxes. I want the user to be able to edit/change the value in the textbox and be able to hit a save button and for the changes to be saved to the view model and the configuration file. I understand there needs to be some type of Get/Post method in the controller but I'm not entirely sure how the controller should look. I am not connecting it to a database at all.

View:

 @using (Html.BeginForm())
{
    <fieldset>
        <div class="row">
            <div class="col-md-1">Logging Directory:</div>
            <div class="col-md-2">@Html.EditorFor(model => Model.loggingDirectory)</div>

            <div class="col-md-1">Archive Directory:</div>
            <div class="col-md-2">@Html.EditorFor(model => Model.archiveDirectory)</div>

            <div class="col-md-1">Time Between Alarms:</div>
            <div class="col-md-2">@Html.EditorFor(model => Model.timeBetweenAlarms)</div>

            <div class="col-md-1">Time to Archive Logs:</div>
            <div class="col-md-2">@Html.EditorFor(model => Model.timeToArchive)</div>

            <div class="col-md-1">Situator IP:</div>
            <div class="col-md-2">@Html.EditorFor(model => Model.situatorIP)</div>

            <div class="col-md-1 ">Situator Port:</div>
            <div class="col-md-2 ">@Html.EditorFor(model => Model.situatorPort)</div>

            <div class="col-md-1 ">Clean Up:</div>
            <div class="col-md-2 ">@Html.EditorFor(model => Model.timeToCleanUp)</div>

            <div class="col-md-1 ">Coorelation Zone:</div>
            <div class="col-md-2">@Html.EditorFor(model => Model.coorelationZone)</div>
        </div>
        <div class="row submitButton">
            <button class="btn btn-primary" type="submit">Save</button>
        </div>
    </fieldset>
}

View Model

public class ConfigurationViewModel
{
    public string loggingDirectory { get; set; }
    public string archiveDirectory { get; set; }
    public string situatorIP { get; set; }
    public string situatorPort { get; set; }
    public string timeBetweenAlarms { get; set; }
    public string timeToArchive { get; set; }
    public string sightlogixIP { get; set; }
    public string timeToCleanUp { get; set; }
    public string coorelationZone { get; set; }
}

Controller:

public ActionResult Index()
    {
        ConfigurationViewModel cvm = new ConfigurationViewModel();


        cvm.loggingDirectory = ConfigurationManager.AppSettings["loggingDirectoryPath"];
        cvm.archiveDirectory = ConfigurationManager.AppSettings["archiveDirectoryPath"];
        cvm.situatorIP = ConfigurationManager.AppSettings["SituatorIP"];
        cvm.situatorPort = ConfigurationManager.AppSettings["SituatorPort"];
        cvm.timeBetweenAlarms = ConfigurationManager.AppSettings["TimeIncrementBetweenalarmsInSeconds"];
        cvm.timeToArchive = ConfigurationManager.AppSettings["timeIncrementForArchivingLogFilesInHours"];
        cvm.sightlogixIP = ConfigurationManager.AppSettings["SightLogixIP"];
        cvm.timeToCleanUp = ConfigurationManager.AppSettings["timeIncrementForCleaningUp"];
        cvm.coorelationZone = ConfigurationManager.AppSettings["correlationZoneLengthInFeet"];

        return View(cvm);
    }


    [HttpGet]
    public ActionResult Edit()
    {

        return;
    }


    [HttpPost]
    public ActionResult Edit()
    {

        return;
    }
Daniel A. White
  • 187,200
  • 47
  • 362
  • 445
Matthew Czajka
  • 159
  • 1
  • 2
  • 17
  • Your POST method should have one or more parameters with the data you want to save. Often a single parameter which is an instance of your Model or ViewModeal. – Joe Apr 20 '17 at 18:50
  • What exactly are you asking? How to "hit" your Edit functions from a button click? Like here -> http://stackoverflow.com/questions/2503923/html-button-calling-an-mvc-controller-and-action-method ? Or something else? – Aaron Apr 20 '17 at 18:51
  • I'm trying to find out what the Edit Method should look like to be able to save any values that have changed. – Matthew Czajka Apr 20 '17 at 18:59

1 Answers1

0

Pass view model in Get Edit method

[HttpGet]
public ActionResult Edit()
{

    ConfigurationViewModel cvm = new ConfigurationViewModel();


    cvm.loggingDirectory = ConfigurationManager.AppSettings["loggingDirectoryPath"];
    cvm.archiveDirectory = ConfigurationManager.AppSettings["archiveDirectoryPath"];
    cvm.situatorIP = ConfigurationManager.AppSettings["SituatorIP"];
    cvm.situatorPort = ConfigurationManager.AppSettings["SituatorPort"];
    //...

    return View(cvm);
}

Send updated view model to post edit method and perform action on it

[HttpPost]
public ActionResult Edit(ConfigurationViewModel cvm)
{

    ConfigurationManager.AppSettings["archiveDirectoryPath"] = cvm.archiveDirectory;
    ConfigurationManager.AppSettings["SituatorIP"] = cvm.situatorIP;
    ConfigurationManager.AppSettings["SituatorPort"]= cvm.situatorPort;
    //...
    return View(cvm);
}

And your razor view which will submit updated data to your Post Edit method

@using (Html.BeginForm("Edit", "Your controller", FormMethod.Post))
{
    ....
}
Mukesh Modhvadiya
  • 2,178
  • 2
  • 27
  • 32