【问题标题】:MVC: Updating a FK Relationship from a SelectListMVC:从 SelectList 更新 FK 关系
【发布时间】:2012-09-21 09:31:43
【问题描述】:

我正在使用 MVC4 和 EF Code First,但在获取 DropDownList 以更新模型类型的外键时遇到问题。

这是我的模型:

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 类型的对象

我错过了什么?

【问题讨论】:

    标签: asp.net-mvc entity-framework ef-code-first


    【解决方案1】:

    尝试将 DropDownList 绑定到 HostCustomerID 属性:

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

    【讨论】:

    • 太棒了,解决了ModelState 无效的问题,谢谢!我现在有一个稍微不同的问题要查看,即它正在插入一个新的Customer,而不是仅仅将 FK 关系添加到现有的关系,即使 ID 与现有的客户匹配。无论如何,感谢您的帮助!
    • 为了跟进这一点,我通过显式添加 CustomerID 属性并将其装饰为 Host 导航属性的外键来解决插入问题。
    • 刚遇到同样的问题。您需要用外键装饰模式似乎有点烦人,但是哦!
    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多