我开始学习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_id
或INNER 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),但我成功了。
答案 0 :(得分:0)
您应该创建一个与您的模型相关的ViewModel,在控制器中填充ViewModel并在View中使用它。以下链接非常适合您。 Multiple Models in a Single View (C# MVC3)
答案 1 :(得分:0)
你只有几个问题:
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_item
。unit_id
应该是MstItemUnit
,或者只是Unit
,如果您愿意的话。这也消除了为其指定显示名称的需要。_id
后缀特别令人不安,因为它暗示此属性为int
或Guid
- 您知道,可以使用id - 实际上你引用了一个完整的对象。unit_name
应为Name
。显然,它是单位的名称,因为那是班级。有了这些,你的代码变得更具可读性和人性化的#34;。例如:
@Html.DisplayFor(m => item.Name)
@Html.DisplayFor(m => item.Unit.Name)