Когда я это сделал, каждый раз, когда вы вызываете действие, вам нужно перестраивать список значений в модели. Затем ваша модель также сохраняет выбранное значение, которое автоматически сохраняется.
Вот пример управления адресом, в котором у меня выпадающее состояние.
Сначала моя модель
public class AddressModel
{
[Required(ErrorMessage = "Address is required")]
[DisplayName("Address Line 1")]
public string Address1 { get; set; }
[DisplayName("Address Line 2")]
public string Address2 { get; set; }
[Required(ErrorMessage = "City is required")]
[DisplayName("City")]
public string City { get; set; }
[Required(ErrorMessage = "State is required")]
[DisplayName("State")]
public string State { get; set; }
[Required(ErrorMessage = "Zip code is required")]
[DisplayName("Zip Code")]
[StringLength(5, ErrorMessage = "{0} must be five digits.")]
[RegularExpression(@"\d{5}", ErrorMessage = "{0} must be five digits.")]
public string ZipCode { get; set; }
public Dictionary<string, string> States { get; set; }
public SelectList StatesSelectList
{
get
{
return new SelectList(States, "Value", "Key");
}
}
}
А вот мои действия, все важные части, кроме пропущенных
public ActionResult DoSomething()
{
var model = new AddressModel()
{
States = GetStateList();
};
return View(model);
}
[HttpPost]
public ActionResult DoSomething(AddressModel model)
{
if (ModelState.IsValid)
{
//do stuff here
}
model.States = GetStateList();
return View(model);
}
А вот как это выглядит на мой взгляд
<%: Html.LabelFor(x => x.State)%>
<%: Html.DropDownListFor(x => x.State, Model.StatesSelectList)%>
<%: Html.ValidationMessageFor(x => x.State)%>
Поскольку свойство AddressModel.State
связано с элементом управления, его значение сохраняется каждый раз, когда вызывается действие post.