【发布时间】:2016-03-10 20:56:02
【问题描述】:
目前我能够从 userRole 模型中显示 razer 视图中的所有列。 只是好奇我是否想在 UserRole Razor 视图中显示 SiteName 列,而不是显示 SiteID,这可能吗?我知道它可以通过自定义视图模型来完成,但这是必须的吗?如果我错了,请纠正我!
用户角色模型:
public int UserID { get; set; }
public string UserName { get; set; }
public int SiteID { get; set; }
*No SiteName column here....so i only can show SiteID in razor..
网站模型:
public int SiteID { get; set; }
public string SiteName { get; set; } <<-- the column i want..
控制器:
public ActionResult Index()
{
//need join table here perhaps?
return View(db.User_Role.ToList());
}
剃刀视图:
@model IEnumerable<FAB_Portal_POC.Models.UserRole>
<table class="table table-striped table-hover">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserName)
</th>
<th>
@Html.DisplayNameFor(model => model.Role)
</th>
<th>
@Html.DisplayNameFor(model => model.SiteID)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Role)
</td>
<td>
@Html.DisplayFor(modelItem => item.SiteID) <<-- i want site name.
</td>
</tr>
}
</table>
【问题讨论】:
-
为什么所有的 MVC 教程都这么难?跟我重复一遍:不要使用实体模型作为视图模型。时期。无论如何,你的
User_Role实体模型应该有一个Site导航属性,你可以Include()加入站点表,然后你可以选择站点名称。 -
@CodeCaster,就我个人而言,我认为这总是是正确的。 ViewModel 可以是任何满足视图需求的东西。通常,实体不会(或会造成太多麻烦),但这并不总是正确的。
-
@CodeCaster 好的,我知道这可以通过使用自定义视图模型来完成。只是好奇!
-
@haim 不,不是总是,但在实际应用程序中使用实体模型作为视图模型几乎不够。当然,您的 My First TODO 网站可以正常工作,直到您想要引入相关表格并在下拉列表中显示这些表格。然后 ViewBag 黑客入侵,您将面临一场噩梦。从一开始就使用视图模型。编辑:QED.
-
@CodeCaster,我在这里挑剔,但尽管实体通常更重且面向业务(或至少应该如此),但一些(实体框架)“实体”仅仅是价值对象,而且导致人们只是为了“不使用实体作为视图模型”而复制整个
Country类型(例如)。
标签: c# asp.net-mvc asp.net-mvc-4 razor