您將需要延長ValidationAttribute類,並在乘坐IsValid的方法,如果你想抽自定義JavaScript做驗證實施IClientValidatable。像下面的東西。
[AttributeUsage(AttributeTargets.Property)]
public sealed class AtLeastOneOrTwoParamsHasValue : ValidationAttribute, IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var param1 = validationContext.ObjectInstance.GetType().GetProperty("Param1").GetValue(value, null);
//var param2 = validationContext.ObjectInstance.GetType().GetProperty("Param2").GetValue(value, null);
//DO Compare logic here.
if (!string.IsNullOrEmpty(Convert.ToString(param1)))
{
return ValidationResult.Success;
}
return new ValidationResult("Some Error");
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
//Do custom client side validation hook up
yield return new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.DisplayName),
ValidationType = "validParam"
};
}
}
用法:
[AtLeastOneOrTwoParamsHasValue(ErrorMessage="Atleast one param must be specified.")]
這是正確的自定義驗證是在這裏你的朋友。 – veblock 2012-03-05 00:31:44
有一個名爲RequiredIf的自定義驗證程序可以解決您的問題。 – Joe 2012-03-05 00:49:12
@JoeTuskan,你說得對,我發現[這篇博文](http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc -3.aspx)在你的指導下解決了我的問題。如果你想打出一個答案,所以我可以給你信貸,這很好。如果沒有,請使用我的+1。 – 2012-03-05 01:49:22