1

我使用 MVC 并且有一个问题,构建串联视图模型属性的最佳实践是什么?FullName我可以在两个地方构建连接字段( ):

  1. 在这样的模型视图中

     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);
    }
    
  2. 在控制器中

    public class User
    {
       public string FullName { get; set; }
    }
    
    
    public ActionResult Users()
    {
     var model = new User
                 {
            FullName = "Tomas" + "Saint";   
                  });
    
     return View(model);
    }
    
4

2 回答 2

3

如果计算/函数与视图的格式相关联,那么我会继续将功能放在视图模型中,就像你的全名属性一样,这在视图模型中是正确的。但是,如果您有任何需要域逻辑的功能/计算,那么我认为视图模型不适合这样做,并且可以驻留在域模型中以实现可重用性,或者驻留在业务逻辑层中的其他位置。

所以简短的答案 - 视图模型中的视图格式,其他地方的任何域逻辑。

于 2013-03-08T08:34:10.913 回答
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>
于 2013-03-08T08:35:05.300 回答