Asp.net

使用繼承的 RegularExpressionAttribute 進行 ASP.NET MVC 數據註釋客戶端驗證

  • September 2, 2010

為了保持我的模型驗證乾淨,我想實現我自己的驗證屬性,比如PhoneNumberAttributeEmailAttribute。其中一些可以有利地實現為繼承自RegularExpressionAttribute.

但是,我注意到這樣做會破壞這些屬性的客戶端驗證。我假設某種類型的綁定在某處失敗。

有什麼想法可以使客戶端驗證正常工作嗎?

程式碼範例

public sealed class MailAddressAttribute : RegularExpressionAttribute
{
   public MailAddressAttribute()
       : base(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$")
   {
   }
}

您需要為您的自定義屬性註冊一個客戶端驗證適配器。在這種情況下,您可以使用 System.Web.Mvc 中現有的 RegularExpressionAttributeAdapter,因為它應該與標準正則表達式屬性完全相同。然後在您的應用程序開始使用時註冊它:

DataAnnotationsModelValidatorProvider.RegisterAdapter(
   typeof(MailAddressAttribute),
   typeof(RegularExpressionAttributeAdapter));

如果您編寫需要自定義客戶端驗證的屬性,您可以通過從DataAnnotationsModelValidator繼承來實現自己的適配器(另請參閱Phil Haack 的部落格)。

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