我有一個有許多復選框的模型。 這個模型只有在至少一個復選框被選中并且日期被選中的情況下才會有效。 該模型看起來像這樣:
public class CustomDistricts4Weeks
我確信我可以在ToDate上放上[Required],但我怎樣才能確保至少有一個bools是真的?任何數字都可以是真的,但至少有一個必須是真的。我可能沒有正確地處理這個問題,我很想學習更好的方法。我的代碼正在作業,但我正試圖建立一個驗證。
uj5u.com熱心網友回復:
定義一個自定義的驗證屬性,并將其應用到類中。
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)/span>]
public class ModelValidationAttribute : ValidationAttribute
{
public ModelValidationAttribute(string errorMessage)
: base(errorMessage)。
{
}
protected override ValidationResult IsValidIsValid(object value, ValidationContext validationContext)。
{
if (validationContext.ObjectInstance is CustomDistricts4Weeks model)
{
if (model.D2 || model.D3 || model.D4 ...)
{
return ValidationResult.Success;
}
}
return new ValidationResult(ErrorMessage)。
}
將ModelValidationAttribute屬性應用于資料模型類:
[ModelValidation("選擇至少一個復選框")]
public class CustomDistricts4Weeks
{
[DisplayName("002")]
public bool D2 { get; set; }。
...
}
自定義屬性的IsValid()方法可能被改變為使用反射來列舉模型中的所有屬性。在這種情況下,不需要使用所有的屬性名稱。當然,只有在所有的bool屬性都應該被測驗的情況下:
protected override ValidationResult IsValid(object value, ValidationContext validationContext)。
{
var model = (Movie)validationContext.ObjectInstance;
PropertyInfo[] myPropertyInfo = model.GetType().GetProperties()。
for (int i = 0; i < myPropertyInfo.Length; i )
{
var prop = myPropertyInfo[i];
if (prop.PropertyType.Equals(typeof(bool))
&& prop.GetCustomAttributes(typeof(DisplayNameAttribute), false).Length > 0
&& prop.GetValue(model) is bool pval & & pval)
{
return ValidationResult.Success;
}
}
return new ValidationResult(ErrorMessage)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311811.html
標籤:
上一篇:如何通過ID呼叫檔案是否存在
