Я использую MVC3 с представлениями Razor и хотел бы создать многоразовые DropDownLists для нескольких моих классов, но после долгих поисков я не нашел пример, который выполняет именно то, что мне нужно ...
Для этого примера у меня есть два класса, как это: -
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public Group Group { get; set; }
}
public class Group
{
public int ID { get; set; }
public string Name { get; set; }
}
У меня есть работающий контроллер / представление для человека.Представление имеет элемент управления DropDownListFor:
@model Person
...
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
Представление использует класс Person напрямую, а не посредническую модель, поскольку я не нашел убедительной причины абстрагировать одно от другого на этом этапе.
Вышеприведенное работает нормально ... в контроллере я беру значение из Group.ID в Person, возвращаемое из представления, ищу его и устанавливаю Person.Group на результат.Работает, но не идеально.
Я нашел связующее здесь: Значения MVC DropDownList, отправленные в модель, не привязаны , что сработает для меня, но у меня нетэто работает еще ... так как это действительно кажется полезным, если я могу использовать повторно.
Я хотел бы сделать что-то подобное в шаблоне: -
@model Group
@Html.DropDownListFor(o => o.Group.ID, (ViewData["groups"] as SelectList))
Ииспользуйте его в таком виде: -
@Html.EditorFor(o => o.Group)
Однако вышеприведенное, похоже, не работает ... в приведенной выше строке EditorFor вставляются редакторы для всего класса (например, текстовое поле для Group.Description, а также) ... вместо вставки DropDownList с моими перечисленными группами
у меня есть вышеуказанный шаблон в файле с именем Group.cshtml в Views / Shared / EditorTemplates
Если это сработало, то всякий раз, когдаУ класса есть свойство типа Group, этот редактор DropDownList будет использоваться по умолчанию (или, по крайней мере, если он указан каким-либо атрибутом)
Заранее благодарим за любой предоставленный совет ...