あなたは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
問題を解決するためのRequiredIfというカスタムバリデーターがあります。 – Joe
@JoeTuskan、そうです、[このブログの記事](http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc)が見つかりました-3.aspx)を参考にして、問題を解決します。私があなたに信用を与えることができるように答えを入力したいのであれば、それは私のものです。そうでなければ、私の+1をしてください。 –