ASP.NET MVC 4使用EF显示来自2模型的数据

时间:2015-02-04 15:21:18

标签: asp.net-mvc-4 model

我开始学习ASP.NET MVC 4并且在1个文件中停留显示Data From 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);
 }

那么如何使用mst_item.unit_idINNER JOIN根据Include在视图中显示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),但我成功了。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

你只有几个问题:

  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)
    }
    
  3. 那就是说,你在这里也遇到了一些风格问题,因为你是新手,我会指出。

    1. 类和属性名称应该是驼峰式的,即MstItem,而不是mst_item
    2. 导航属性应以他们连接的对象命名,例如unit_id应该是MstItemUnit,或者只是Unit,如果您愿意的话。这也消除了为其指定显示名称的需要。
    3. 在此导航属性上使用_id后缀特别令人不安,因为它暗示此属性为intGuid - 您知道,可以使用id - 实际上你引用了一个完整的对象。
    4. 虽然不那么重要,但在该类的属性名称中重复类名或其中的一部分是没有意义的。例如,unit_name应为Name。显然,它是单位的名称,因为那是班级。
    5. 有了这些,你的代码变得更具可读性和人性化的#34;。例如:

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