我应该注释我的视图模型还是我的模型?

时间:2012-12-12 11:05:35

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

如果我使用MVVM模式来填充我的视图,即除了模型类之外我还在使用视图模型。模型类不与视图对话;视图模型填充视图。

在这种情况下,如果我需要使用数据注释进行验证等,我需要注释我的视图模型类而不是我的模型类,对吧?

例如是否应在[Required]属性上注释:

namespace MyApp.ViewModels
{
    public class Category
    {
        [Required]
        [StringLength(50)]
        public string CategoryName { get; set; }

        [StringLength(255)]
        [AllowHtml]
        public string Description { get; set; }
    }
}

或者应该这样:

namespace MyApp.Models
{
    public partial class Category
    {
        [Required]
        public virtual string CategoryName
        {
            get;
            set;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

正确,您的viewmodel不应使用Models(实体),但可以包含模型属性,例如:

//wrong
public class Person{
     public string FirstName{get;set;}
     public string LatsName{get;set;}
}

public class ViewModel{
     public Person Person{get;set;}
}

这是更好地使用viewmodel:

public class ViewModel{
     public string FirstName{get;set;}
     public string LastName{get;set;}
}

是的,您的注释应该在viewmodel上。


您也可以在viewmodel中将注释设置为复杂类型,但请注意,复杂类型不应该是实体/域类,而是仅针对viewmodel的数据模型类,例如:

public class InsertPerson{
     [Required]
     public string FirstName{get;set;}
}

public class EditPerson{
     [Required]
     public string Id{get;set;}

     [Required]
     public string FirstName{get;set;}
}

public class ViewModel{
     public InsertPerson insertPerson{get;set;}
}