Asp.net-Mvc

數據模型需要兩個屬性之一

  • October 24, 2016

假設我有一個Person班級FirstNameand LastName。我希望使用者必須在 UI 中輸入兩個值中的至少一個,但他可能不必輸入每個值。

如果我Required在它們中的每一個上放置屬性/數據註釋,這使得它們都成為必需的。

如何為此規則進行伺服器端驗證(也包括客戶端驗證)?

您可以為此使用自定義屬性。簡而言之,自定義屬性將檢索這兩個值,然後確保至少一個具有值。請參閱此頁面了解更多資訊。這是一個範例(未經測試的程式碼):

[AttributeUsage(AttributeTargets.Property, AllowMultiple =false, Inherited = false)]
 public class ValidatePersonName: ValidationAttribute
 {
   protected override ValidationResult IsValid(object value, ValidationContext validationContext)
   {
     string FirstName = (string)validationContext.ObjectType.GetProperty("FirstName").GetValue(validationContext.ObjectInstance, null);

     string LastName = (string)validationContext.ObjectType.GetProperty("LastName").GetValue(validationContext.ObjectInstance, null);

 //check at least one has a value
 if (string.IsNullOrEmpty(FirstName) && string.IsNullOrEmpty(LastName))
       return new ValidationResult("At least one is required!!");

     return ValidationResult.Success;
   }
 }

用法:

class Person{

[ValidatePersonName]
FirstName{get;set;}

LastName{get;set;}
}

引用自:https://stackoverflow.com/questions/13915256