Я попытаюсь ответить на ваш вопрос с примером (за которым следует небольшое объяснение)
Позволяет определить модель как,
public class TestModel
{
public string SelectedItem { get; set; }
public IEnumerable<SelectListItem> DropdownItems
{
get
{
if (Items == null)
return null;
return Items.Select(i => new SelectListItem { Text = i, Value = i });
}
}
public IEnumerable<string> Items { get; set; }
}
А в контроллере,
[HttpGet]
public ActionResult Index()
{
TestModel model = new TestModel();
model.Items = new List<string> { "A", "B" };
return View(model);
}
[HttpPost]
public ActionResult Index(TestModel model)
{
return View(model);
}
Теперь в представлении
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>TestModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.SelectedItem)
</div>
<div class="editor-field">
@for (int i = 0; i < Model.Items.Count(); i++)
{
@Html.Hidden("Items["+i+"]",Model.Items.ElementAt(i))
}
@Html.DropDownListFor(m=>m.SelectedItem,Model.DropdownItems)
@Html.ValidationMessageFor(model => model.SelectedItem)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
Объяснение:
Модель имеет свойство типа IEnumerable Items, которое заполняет свойство DropdownItems.В представлении мы можем установить скрытые поля для элементов, чтобы они заполнялись при каждом запросе публикации. Поэтому нам не нужно устанавливать его снова.