У меня возникла проблема с использованием @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 к свойству навигации.
Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: мне пришлось явно установить атрибуты ForeignKey, чтобы я мог напрямую получить доступ к «Vendor_Id», затем я изменил DropDownListFor, чтобы указать на «Vendor_Id» вместо свойства навигации. Кажется, это работает.