我的ASP.NET MVC 3应用程序遇到麻烦。我有两个属性在我的模型,我只想要其中一个需要在我看来,基于任何一个是空的。所以例如,如果我输入一个电话号码,那么不再需要电子邮件,反之亦然,但如果我同时留下两个空格,那么需要1个,下面是我的模型:
[Display(Name = "Contact Phone Number:")] [MaxLength(150)] public string ContactPhoneNumber { get; set; } [Display(Name = "Contact Email Address:")] [MaxLength(100)] public string ContactEmailAddress { get; set; }
解决方法
您可以在类上实现IValidatableObject,并提供实现自定义逻辑的Validate()方法。如果您希望确保提供该逻辑,则将其与客户端上的自定义验证逻辑相结合。我发现这比实现一个属性更容易。
public class ContactModel : IValidatableObject { ... public IEnumerable<ValidationResult> Validate( ValidationContext context ) { if (string.IsNullOrWhitespace( ContactPhoneNumber ) && string.IsNullOrWhitespace( ContactEmailAddress )) { yield return new ValidationResult( "Contact Phone Number or Email Address must be supplied.",new [] { "ContactPhoneNumber","ContactEmailAddress" } ); } } }
要使客户端的所有工作都可以,您需要将以下脚本添加到您的视图中:
<script type="text/javascript"> $(function() { $('form').validate(); $('form').rules('add',{ "ContactPhoneNumber": { depends: function(el) { return !$('#ContactEmailAddress').val(); } } }); }); </script>