MVC在View Model或Controller中连接属性

时间:2013-03-08 08:24:35

标签: c# asp.net-mvc model-view-controller separation-of-concerns

我使用MVC并且有一个问题,构建连接的View Model属性的最佳实践是什么?我可以在两个地方建立连接字段(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);
    }
    

2 个答案:

答案 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>