我有一个ViewModel,它具有TextBox和Checkbox的属性:

public bool SendAlerts { get; set; }
public string EmailAddress { get; set; }


我需要验证EmailAddress字段(文本框)以确保只有在我的视图(绑定到SendAlerts属性)中的复选框被选中时,才有一个电子邮件地址。
如果未选中该复选框,则EmailAddress文本框是否为空都没有关系。

如何执行此条件验证?我对DataAnnotations中的其他一些属性使用了ViewModel,例如简单的“ Required”注释(但在这种情况下我不能使用它,因为它是有条件的)。

我在视图模型中将CustomValidation用于其他几个属性,即

public static ValidationResult IsTitleValid(object value)
{ ... }


但是,通过这种方法,我只有1个对象值,而不能同时引用复选框和文本框值。

使用MVC解决此问题的最佳方法是什么?

最佳答案

我们最近被迫在工作中做类似的事情,并且找不到比以下更好的解决方案:
http://blogs.msdn.com/b/simonince/archive/2010/06/04/conditional-validation-in-mvc.aspx

在此处更新为MVC3:
http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

基本上,您引入了一个新属性RequiredIf。通过此解决方案,您还可以进行客户端验证。

10-07 12:52
查看更多