如果我使用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;
}
}
}
答案 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;}
}