我使用MVC并且有一个问题,构建连接的View Model属性的最佳实践是什么?我可以在两个地方建立连接字段(FullName
):
在这样的模型视图中
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get {return FirstName+LastName;} }
}
public ActionResult Users()
{
var model = new User
{
FirstName = "Tomas",
LastName = "Saint",
});
return View(model);
}
在控制器
中public class User
{
public string FullName { get; set; }
}
public ActionResult Users()
{
var model = new User
{
FullName = "Tomas" + "Saint";
});
return View(model);
}
答案 0 :(得分:3)
如果计算/函数与视图的格式相关联,那么我将继续将功能放在视图模型中,就像您的全名属性一样,这在视图模型中是正确的。但是,如果您有任何需要域逻辑的函数/计算,那么我认为视图模型不适合它,并且可以驻留在域模型中以实现可重用性,或者位于业务逻辑层中的其他位置。
所以答案很简单 - 视图模型中的视图格式化,其他任何域逻辑。
答案 1 :(得分:1)
计算显示值的方法或属性(如示例中的FullName)属于ViewModel。这样做可以为您提供一种干净,类型安全的方法,将数据传递给视图,并允许视图以一致的方式访问属性。此方法还具有在使用特定ViewModel的任何地方使属性可用的优点。如果将属性添加到控制器,则不会出现这种情况。
以下示例使用Razor语法:
@model MvcApplication.Models.User
...
<div class="editor-label">
@Html.LabelFor(m => m.FullName)
</div>
<div class="editor-field">
@Html.DisplayFor(m => m.FullName)
</div>