I am working on an MVC application where the Model class Item
has a List<Colour>
named AvailableColours
as a property.
AvailableColours
is a user defined subset of Colour
classes. I would like to display all Colour
instances in a check box list, and when submitted, AvailableColours
is a List<Colour>
containing the checked Colour
classes.
What is the best way to do this in MVC?
Edit: My code so far, although I feel this is not the most MVC-ish way to do it!
Model
public class Item
{
public int ID { get; set; }
public List<Colour> AvailableColours { get; set; }
}
View
@model MyNamespace.Models.Item
@using MyNamespace.Models;
@{
ViewBag.Title = "Create";
var allColours = new List<Colour>(); //retrieved from database, but omitted for simplicity
}
<h2>Create New Item</h2>
@using (Html.BeginForm("Create", "Item", FormMethod.Post))
{
<div>
@Html.LabelFor(model => model.AvailableColours)
@foreach (var colour in allColours)
{
<input type="checkbox" name="colours" value="@colour.Description" />
}
</div>
<input type="submit" value="Submit" />
}
Controller
[HttpPost]
public ActionResult Create(Item item, string[] colours)
{
try
{
foreach (var colour in colours)
{
item.AvailableColours.Add(GetColour(colour));//retrieves from database
return RedirectToAction("Index");
}
}
catch
{
return View();
}
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…