【发布时间】:2011-08-09 22:41:03
【问题描述】:
我在尝试使用 @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 方法在 ModelState.IsValid 上返回 false 并引发模型错误:从类型“System.String”到类型“...Models.Vendor”的参数转换失败,因为没有类型转换器可以在这些之间进行转换类型。
如果我让页面通过,我最终会出现服务器错误: 异常详细信息:System.ArgumentNullException:值不能为空。 参数名称:项目
在高低搜索之后,我找不到 @Html.DropDownListFor() 没有正确地将供应商对象自动绑定到导航属性的原因。
任何帮助将不胜感激。
编辑: 我最终不得不显式设置 ForeignKey 属性,以便我可以直接访问“Vendor_Id”,然后我将 DropDownListFor 更改为指向“Vendor_Id”而不是导航属性。这似乎行得通。
【问题讨论】:
标签: asp.net-mvc-3 navigation properties html.dropdownlistfor