是否有可能在ASP.NET MVC中的一個字段上的CustomValidationAttribute只有在不同的CustomValidationAttribute驗證不同字段時才能執行。自定義驗證屬性ASP.NET MVC
我的看法需要包含單獨的日期和時間字段。我有兩個單獨的自定義驗證屬性。但是,是否有可能僅在日期驗證屬性驗證爲true時才檢查時間驗證屬性?
謝謝。
是否有可能在ASP.NET MVC中的一個字段上的CustomValidationAttribute只有在不同的CustomValidationAttribute驗證不同字段時才能執行。自定義驗證屬性ASP.NET MVC
我的看法需要包含單獨的日期和時間字段。我有兩個單獨的自定義驗證屬性。但是,是否有可能僅在日期驗證屬性驗證爲true時才檢查時間驗證屬性?
謝謝。
時驗證屬性檢查 只有當日期驗證屬性 驗證爲真?
此聲明表示自定義驗證。是的,你可以做到這一點。您可以定義將其他字段的名稱作爲參數的自定義驗證屬性。然後,在重寫的Validate()方法中,您可以通過名稱獲取其他字段的PropertyInfo,然後獲取驗證屬性並驗證它們。得到結果後,您可以決定是否對第一個字段進行驗證。 Brad Wilson上mvcConf有很大的職位有關驗證
順便問一下,你也可以實現IClientValidatable收官客戶端驗證
這是非常非常的示例代碼,它需要一些參數檢查和錯誤處理等。但我認爲想法很清楚
public class OtherFieldDependentCustomValidationAttribute : ValidationAttribute
{
public readonly string _fieldName;
public OtherFieldDependentCustomValidationAttribute(string otherFieldName)
{
_fieldName = otherFieldName;
}
protected override System.ComponentModel.DataAnnotations.ValidationResult IsValid(object value, System.ComponentModel.DataAnnotations.ValidationContext validationContext)
{
//Get PropertyInfo For The Other Field
PropertyInfo otherProperty = validationContext.ObjectType.GetProperty(_fieldName);
//Get ValidationAttribute of that property. the OtherFieldDependentCustomValidationAttribute is sample, it can be replaced by other validation attribute
OtherFieldDependentCustomValidationAttribute attribute = (OtherFieldDependentCustomValidationAttribute)(otherProperty.GetCustomAttributes(typeof(OtherFieldDependentCustomValidationAttribute), false))[0];
if (attribute.IsValid(otherProperty.GetValue(validationContext.ObjectInstance, null), validationContext) == ValidationResult.Success)
{
//Other Field Is valid, do some custom validation on current field
//custom validation....
throw new ValidationException("Other is valid, but this is not");
}
else
{
//Other Field Is Invalid, do not validate current one
return ValidationResult.Success;
}
}
}
爲什麼你想這樣做?如果日期和時間都無效,爲什麼不這樣說呢?或者爲什麼不使用客戶端驗證來做到這一點,這將做你想要的? – arame3333 2011-03-30 07:11:15