Asp.net mvc 3 具有相同ViewModel的操作的不同DataAnnotation
如何将这两个ViewModel合并为一个,并为每个操作执行不同的验证客户端和服务器?保存草稿时不需要遵守说明,但在宣布时需要遵守说明Asp.net mvc 3 具有相同ViewModel的操作的不同DataAnnotation,asp.net-mvc-3,validation,viewmodel,Asp.net Mvc 3,Validation,Viewmodel,如何将这两个ViewModel合并为一个,并为每个操作执行不同的验证客户端和服务器?保存草稿时不需要遵守说明,但在宣布时需要遵守说明 public class SaveDraftViewModel { [Required] public string Title {get;set;} public string Description {get;set;} } public class AnnounceViewModel { [Required] pu
public class SaveDraftViewModel
{
[Required]
public string Title {get;set;}
public string Description {get;set;}
}
public class AnnounceViewModel
{
[Required]
public string Title {get;set;}
[Required]
public string Description {get;set;}
}
根据您将如何区分这两种类型的模型,您可以使用以下方法来执行此操作:
public class CombinedViewModel : IValidatableObject
{
[Required]
public string Title {get; set;}
public string Description {get; set;}
public ViewModelType Type {get; set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
if (Type == ViewModelType.Announce)
{
results.Add(new ValidationResult("Description is required.");
}
return results;
}
}
其中ViewModelType是定义两种模型类型的枚举。Oops,完全忽略了您要求的客户端验证。我提出的解决方案将只执行服务器端验证。除了自定义javascript代码之外,我不确定最干净的方法是什么。