2012-09-21 20 views
2

我正在玩MVC4和EF代码优先,我得到一个问题得到一个DropDownList来更新模型类型的外键。MVC:更新选择列表中的FK关系

这里是我的模型:

public class Customer 
{ 
    public int CustomerID { get; set; } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 

public class Party 
{ 
    public int PartyID { get; set; } 

    public virtual Customer Host { get; set; } 
    public string Location { get; set; } 
    public DateTime Date { get; set; } 
} 

所以一方有Host这是一个Customer

在控制器为/Party/Create GET方法,我传递的ViewBag客户列表:

ViewBag.Customers = new SelectList(db.Customers, "CustomerID", "FirstName");

然后在查看我的渲染这是一个DropDownList的:

@Html.DropDownListFor(model => model.Host, ViewBag.Customers as SelectList, String.Empty)

这一切工作正常,我可以从客户的下拉列表中选择。但是,提交表单时,/ Party/Create POST方法不会插入数据,因为ModelState无效。看看ModelState,我可以看到所选客户的CustomerID存在,但它无法从字符串转换为类型为Customer的对象

我错过了什么?

回答

2

尽量将DropDownList绑定到HostCustomerID属性:

@Html.DropDownListFor(
    model => model.Host.CustomerID, 
    ViewBag.Customers as SelectList, 
    String.Empty 
) 
+0

真棒,这是分类与'ModelState'是无效的,感谢的问题!我现在看到的问题略有不同,即它插入一个新的“客户”,而不是仅将FK关系添加到现有客户,即使该ID与现有客户匹配。无论如何,感谢您的帮助! –

+0

为了跟上这一点,我通过明确添加一个CustomerID属性并将其装饰为'Host'导航属性的外键来解决插入问题。 –

+0

刚刚有同样的问题。似乎有点烦人,你需要用外键来装饰模式,但哦! – Sergio