Stefanvds подход был то, что я делал раньше.Но я обнаружил, что есть лучший способ использовать additionalViewData
.
Используйте этот редактор для метода расширения HTML Helper.http://msdn.microsoft.com/en-us/library/ff406462.aspx
Вместо передачи Выбрать элементы списка в ViewData в Controller , вы делаете это в View .Передайте элементы списка в качестве анонимного объекта для параметра additionalViewData
.Важно использовать то же имя , что и ваше имя свойства.
@Html.EditorFor(
m => m.MyPropertyName,
new { MyPropertyName = Model.ListItemsForMyPropertyName }
);
Конечно, вы передаете объект View Model.
public class MyViewModel
{
public int MyPropertyName;
public IList<SelectListItem> ListItemsForMyPropertyName;
}
EditorFor
метод использует ваши существующие шаблоны представления редактора .Таким образом, вам не нужно снова указывать имена классов CSS и атрибуты HTML, как при использовании метода Html.DropDown ().
Например,
//------------------------------
// additionalViewData
//------------------------------
@Html.EditorFor(
m => m.MyPropertyName,
new { MyPropertyName = Model.ListItemsForMyPropertyName }
)
//------------------------------
// traditional approach requires to pass your own HTML attributes
//------------------------------
@Html.DropDown(
"MyPropertyName",
Model.ListItemsForMyPropertyName,
new Dictionary<string, object> {
{ "class", "myDropDownCssClass" }
}
);
//------------------------------
// DropDownListFor still requires you to pass in your own HTML attributes
//------------------------------
@Html.DropDownListFor(
m => m.MyPropertyName,
Model.ListItemsForMyPropertyName,
new Dictionary<string, object> {
{ "class", "myDropDownCssClass" }
}
);
Именно поэтому мне больше нравится подход additionalViewData
.Потому что представленный HTML-код полностью полагается на шаблоны редактора.
Кроме того, использование специализированных моделей просмотра делает ваш код чище и проще в обслуживании.
Надеюсь, это поможет.