Я столкнулся с проблемой, пытаясь использовать @ Html.DropDownListFor ().
У меня есть модель со свойством навигации:
public class Thing {
...
public virtual Vendor Vendor { get; set; }
}
В контроллере я беру список поставщиков, чтобы выбросить в ViewBag:
public ActionResult Create() {
ViewBag.Vendors = Vendor.GetVendors(SessionHelper.CurrentUser.Unit_Id);
return View();
}
Элемент HTML в представлении выглядит следующим образом:
@Html.DropDownListFor(model => model.Vendor, new SelectList(ViewBag.Vendors, "Id", "Name"), "---- Select vendor ----")
@Html.ValidationMessageFor(model => model.Vendor)
Выполняется выпадающий список, и все выглядит нормально, пока я не отправлю форму. Метод HttpPost Create возвращает false на ModelState.IsValid и выдает ошибку модели: Преобразование параметра из типа 'System.String' в тип '... Models.Vendor' завершилось неудачно, поскольку преобразователь типов не может выполнить преобразование между этими типы.
Если я пропускаю страницу, я получаю ошибку сервера:
Сведения об исключении: System.ArgumentNullException: значение не может быть нулевым.
Название параметра: элементы
После поиска по верхнему и нижнему уровням я не смог найти причину, по которой @ Html.DropDownListFor () неправильно привязывает объект Vendor к свойству навигации.
Любая помощь будет принята с благодарностью.
EDIT:
В итоге мне пришлось явно установить атрибуты ForeignKey, чтобы я мог получить прямой доступ к «Vendor_Id», затем я изменил DropDownListFor, указав «Vendor_Id» вместо свойства навигации. Кажется, это работает.