I have this code which generates and shows list of selectable items that user can post to controller in order to save into database.
Model looks like this:
public class DeliveryAddressSelectionModel()
{
public List<DeliveryAddress> DeliveryAddresses { get; set; }
public List<int> SelectedAddressIDs { get; set; }
}
public class DeliveryAddress()
{
public int ID { get; set; }
public string Location { get; set; }
}
Controller looks like
[HttpGet]
public ActionResult Edit()
{
var model = new DeliveryAddressSelectionModel();
model.DeliveryAddresses = AddressDetails.GetAvailable(); //Get from EF
model.SelectedAddressIDs = new List<int>(); //Populate this list with Address IDs for pre-selection
return View(model);
}
[HttpPost]
public ActionResult Edit(DeliveryAddressSelectionModel model)
{
//save the model.SelectedAddressIDs in DB
return RedirectToAction("Index");
}
And finally view looks like this:
<form method="post">
<ul>
@foreach(var address in DeliveryAddresses)
{
<li>
<input id="address@(address.ID)" type="checkbox"
name="SelectedAddressIDs"
value="@address.ID"
@(Model.SelectedAddressIDs.Contains(address.ID) ? "checked" : "")
/>
<label for="address@(address.ID)">@address.Location</label>
</li>
}
<ul>
<input type="submit" value="Save Address"/>
</form>
This code works, but as I am learning MVC, and I would like to have suggestions. What areas in this code could have been done better, or what is best practice in regards with this kind of model population and posting? Could I use a @Html.CheckBoxFor()
helper or this is ok?