#entity-framework #asp.net-mvc-3
#entity-framework #asp.net-mvc-3
Вопрос:
У меня есть автоматически сгенерированный выпадающий список из Entity Framework в строго типизированном представлении:
<div class="editor-field">
@Html.DropDownList("User_FK", String.Empty)
@Html.ValidationMessageFor(model => model.User_FK)
</div>
Вот код действия:
public ActionResult Create()
{
ViewBag.SystemMaster_FK = new SelectList(db.SystemMasters, "System_PK", "Name");
ViewBag.User_FK = new SelectList(db.Users, "User_PK", "NetworkLogin");
return View();
}
Мне нужен этот список для отображения имен пользователей, загруженных из Active Directory. Как мне настроить параметры списка выбора отдельно?
Ответ №1:
@Html.DropDownList
имеет другую перегрузку, а именно:
public static MvcHtmlString DropDownList(
this HtmlHelper htmlHelper,
string name,
IEnumerable<SelectListItem> selectList
)
Итак, вы указываете name
строку, а затем IEnumerable<SelectListItem>
генерируете любым удобным для вас способом.
Итак, (конечно, я предполагаю, что здесь есть некоторые типы — MyUserType
, MyActiveDirectoryRepository
)
List<MyUserType> users = new List<MyUserType>();
foreach(var user in MyActiveDirectoryRepository.GetUsers())
{
users.Add(new MyUserType()
{
ADName = user.Username,
ID = user.ID // or SAM token, or something similar
});
}
Передайте список в ваше представление через шаблон модели представления ViewBag.
public ActionResult Create()
{
// populate list as above
ViewBag.User_FK = new SelectList(users, "ID", "ADName");
return View();
}
Затем, после передачи его в ваше представление (предпочтительно, через view model, не ViewBag)
@Html.DropDownList("NameOfDropDown", ViewBag.User_FK)
Комментарии:
1. CreateViewModel() не существует, или я не знаю, где его найти. Я чего-то не понимаю?
2. @Tjaart Извините — я забыл упомянуть это в моем списке предполагаемых типов. Это простой класс, содержащий
List<MyUserType>
свойство с именемMyList
— это не более чем средство переноса модели, отправленной в ваше представление. Следовательно, «Модель представления»3. На мой взгляд, он не видит myList. Возможно, потому, что моя модель уже определена, на мой взгляд, как
@model SystemInformationManager.Models.SystemMaintainer
4. @Tjaart Я предположил, что в соответствии с вашим
Create
методом действия не было модели.return View();
не отправляет модель в представление. Вы можете попасть внутрьSystemMaintainer
? Если нет, возможно, вам придется включить это вCreateViewModel
и изменить любой существующий код представления, который использует свойства SystemMaintainer.5. ОК. У меня получилось. Мне пришлось изменить список выбора в действии контроллера на
ViewBag.User_FK = new SelectList(users, "ID", "ADName");
, где users — это мой пользовательский тип пользователя. Причина, по которой объект не передается в представление, заключается в том, что Create загружает форму для вставки в таблицу SystemMaintainer.SystemMaintainer
доступен, но как новый объект. Готовы ли вы отредактировать свой ответ, чтобы отразить то, что работает. Я изменю вопрос, чтобы было ясно, что это строго типизированное представление. Спасибо!