【问题标题】:ASP.NET MVC 4 Display data From 2 Model using EFASP.NET MVC 4 使用 EF 显示来自 2 模型的数据
【发布时间】:2015-12-23 20:41:37
【问题描述】:

我开始学习 ASP.NET MVC 4 并坚持在 1 个文件中显示来自 2 个模型的数据 这是我的模型

 public class mst_item
{
    [Key]
    [DisplayName("Item Code")]
    [Required]
    public string item_code{get;set;}

    [DisplayName("Item Name")]
    [Required]
    public string item_name{get;set;}        

    [DisplayName("Unit")]
    [Required]
    public mst_item_unit unit_id{ get; set; }

}


public class mst_item_unit
{
    [Key]
    public int unit_id { get; set; }

    [DisplayName("Unit")]
    public string unit_name { get; set; }


}

然后是我的控制器:

 public ActionResult Item()
 {
        var list_item = db.mst_item.Include("mst_item_unit").ToList();

        return View(list_item);
 }

那么如何使用INNER JOINInclude在View中显示基于mst_item.unit_id的unit_name?类似:

@foreach (var item in Model)
{
      @Html.DisplayFor(modelItem => item.item_name)
      @Html.DisplayFor(modelItem => item.unit_name)
}

我在这里卡住了,但是我在显示mst_item 数据时成功而不加入mst_item_unit(只显示基于mst_item.unit_id 的ID)。

【问题讨论】:

    标签: asp.net-mvc-4 model


    【解决方案1】:

    你只有几个问题:

    1. Include 的参数应该是实体上的导航属性,而不是表名。换句话说,将其更改为:

      var list_item = db.mst_item.Include("unit_id").ToList();
      
    2. 您必须通过导航属性访问第二个实体的属性。换句话说,这是您需要的视图代码:

      @foreach (var item in Model)
      {
          @Html.DisplayFor(modelItem => item.item_name)
          @Html.DisplayFor(modelItem => item.unit_id.unit_name)
      }
      

    也就是说,你在这里也遇到了一些风格问题,因为你是新人,所以我会指出。

    1. 类和属性名称应该是驼峰式命名的,即MstItem,而不是mst_item
    2. 导航属性应该以它们连接的对象命名,即unit_id 应该类似于MstItemUnit,或者只是Unit,如果您愿意的话。这也消除了为其指定显示名称的需要。
    3. 在此导航属性上使用 _id 后缀特别令人不安,因为它暗示此属性是 intGuid - 你知道,可以使用 id 的东西 - 而实际上你'重新引用一个成熟的对象。
    4. 虽然不那么重要,但在该类的属性名称中重复类名或其一部分几乎没有意义。例如,unit_name 应该只是 Name。显然,这是单元的名称,因为那是类。

    有了这些,您的代码将变得更具可读性和“人性化”。例如:

    @Html.DisplayFor(m => item.Name)
    @Html.DisplayFor(m => item.Unit.Name)
    

    【讨论】:

    • 感谢您的建议,当我更改我的代码样式时我会工作,我尝试您的第一个解决方案更改 var list_item = db.mst_item.Include("unit_id").ToList();和 @Html.DisplayFor(modelItem => item.unit_id.unit_name) 但它仍然显示错误消息:未找到列 unit_id_unit_id 并且在我输入 item.unit_id 时没有建议 unit_name。所以我尝试做你的第二个解决方案来更改代码样式然后我覆盖实体名称和属性名称,而不是用驼峰式大小写更改我的表或字段名称,它的工作原理!它显示了 item.Unit.name 属性建议
    【解决方案2】:

    您应该创建一个将两个模型关联起来的 ViewModel,将该 ViewModel 填充到您的控制器中并在您的视图中使用它。以下链接非常适合您。 Multiple Models in a Single View (C# MVC3)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多