私はを継承して、検証中のSSNの再利用性を向上させようとしています。RegularExpressionAttributeを継承しようとすると、もはや有効になりません
public class FooModel
{
[RegularExpression(@"^(?!000)(?!666)(?!9[0-9][0-9])\d{3}[- ]?(?!00)\d{2}[- ]?(?!0000)\d{4}$", ErrorMessage = "The SSN you entered is invalid. If you do not have this number please leave the field blank")]
public string Ssn { get; set; }
}
、クライアントとサーバー上で正常に検証されます:
は、私は以下のモデルがあります。私は、独自の検証にその長い正規表現をカプセル化したかったので、同様に属性:
public class SsnAttribute : RegularExpressionAttribute
{
public SsnAttribute() : base(@"^(?!000)(?!666)(?!9[0-9][0-9])\d{3}[- ]?(?!00)\d{2}[- ]?(?!0000)\d{4}$")
{
ErrorMessage = "SSN is invalid";
}
}
その後、私はそうのように私のFooModel
を変更:
public class FooModel
{
[Ssn(ErrorMessage = "The SSN you entered is invalid. If you do not have this number please leave the field blank")]
public string Ssn { get; set; }
}
今、検証が邪魔にならず、データが上の属性をレンダリングしません。クライアント。私はそれが本質的に同じものでなければならないように思えるので、理由についてはあまりよく分かりません。
提案がありますか?あなたのApplication_Start
クライアント側の検証を放出するための責任を負うことになりますカスタム属性にadapaterを関連付けるために、以下の行を追加して
私の属性はIClientValidatableを実装していました。 'RegularExpressionAttribute'を使うのではなく、このための属性が必要だった理由は、私のプロジェクトに' public const string'正規表現をどこに置くか分かりたくないからです([コンピュータサイエンス...](http://martinfowler.com/bliki/TwoHardThings.html))、また、MVCのメンバーからは、基本的には 'RegularExpressionAttribute'(' PhoneAttribute '、 'EmailAddressAttribute'など)、私は正当化されたと感じました –