【问题标题】:How Do I Use Entity Object Navigation Properties In A DropDownList On My Strongly Typed ASP.NET MVC Create and Edit Views?如何在强类型 ASP.NET MVC 创建和编辑视图的下拉列表中使用实体对象导航属性?
【发布时间】:2009-05-16 21:27:00
【问题描述】:

我有一个包含 Product 和 Family 类型的实体数据模型。每个产品都有一个系列。

我在一个 ASP.NET MVC 网站上使用这个模型。我希望在我的产品控制器的创建和编辑视图上使用 Family DropDownLists。

如何在强类型 ASP.NET MVC 创建和编辑视图的 DropDownList 中使用实体对象导航属性?

以下代码失败...

产品控制器:

// POST: /Product/Create

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Product p)
{
    db.AddToProduct(p);
    db.SaveChanges();
    return RedirectToAction("Index");
}

创建视图:

<p>
    <label for="Family">Family:</label>
    <%= Html.DropDownList("Family", new SelectList((IEnumerable)ViewData["Families"], "Id", "Name"))%>
    <%= Html.ValidationMessage("Family", "*")%>
</p>

我可以在不使用 FormCollection 的情况下执行此操作吗?我宁愿将它保留为强类型产品。

【问题讨论】:

    标签: c# .net asp.net asp.net-mvc entity-framework


    【解决方案1】:

    是的,因此您将需要实体对象以外的其他东西来获取引用列表。我看到您从 ViewData 收集包中获取了一个选择列表,但没有看到它进入。只要您将它放入 ViewData 或 ViewModel 对象中,就可以了。

    关于您的外键的部分......正如亚历克斯所说,EF 的当前版本不支持将外键作为简单属性直接公开。我相信这将在 2.0 中发生变化,但同时搜索伪造的外键属性(所以不允许我发布链接)。它对我有用。

    【讨论】:

      【解决方案2】:

      目前,您不能使用外键进行绑定。 您必须手动更新产品和系列之间的关系。 为此,您应该在您的 "post" 操作中添加一个 familyid 参数。 并将product.family 分配给families.Where(f=&gt;f.id = famylyId)

      【讨论】:

        【解决方案3】:

        假设 Product 具有 Families 属性(或者是具有外键约束的 Linq 实体)

        <%= Html.DropDownList("Family", new SelectList(model.Families, "Id", "Name"))%>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-10
          • 2015-08-28
          • 2018-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多