Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 ASP.NET MVC 4使用EF显示来自2个模型的数据_Asp.net Mvc 4_Model - Fatal编程技术网

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

Asp.net mvc 4 ASP.NET MVC 4使用EF显示来自2个模型的数据,asp.net-mvc-4,model,Asp.net Mvc 4,Model,我开始学习ASP.NETMVC4,并在一个文件中显示来自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;}

我开始学习ASP.NETMVC4,并在一个文件中显示来自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\u项的单位名称。单位id
?比如:

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

我在这里卡住了,但是我在显示
mst\u项
数据时成功了,而没有加入
mst\u项
(只显示基于
mst\u项.unit\u ID
)的ID。

您应该创建一个将两个模型关联起来的视图模型,在控制器中填充该视图模型并在视图中使用它。下面的链接非常适合您的情况。

您有几个问题:

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

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

    @foreach (var item in Model)
    {
        @Html.DisplayFor(modelItem => item.item_name)
        @Html.DisplayFor(modelItem => item.unit_id.unit_name)
    }
    
  • 也就是说,你也有一些风格上的问题,因为你是新来的,我要指出

  • 类和属性名称应采用驼峰式大小写,即
    MstItem
    ,而不是
    mst\u项
  • 导航属性应以它们所连接的对象命名,即
    unit\u id
    应类似于
    MstItemUnit
    ,或者只要
    unit
    ,如果您愿意的话。这样就不需要为其指定显示名称
  • 在这个导航属性上使用
    \u id
    后缀尤其令人不安,因为它意味着这个属性是
    int
    Guid
    ——你知道,可以用作id的东西——而实际上你引用的是一个完整的对象
  • 虽然没有那么重要,但在该类的属性名称中重复类名或其一部分是没有意义的。例如,
    unit\u 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\u id.unit\u name)但它仍然显示错误消息:未找到列unit\u id\u unit\u id,并且在我键入item.unit\u id时未建议使用unit\u名称。因此,我尝试了您的第二个解决方案来更改代码样式,然后我覆盖了实体名称和属性名称,而不是使用驼峰大小写更改我的表或字段名称,效果很好!它显示item.Unit.name属性建议