2010-03-05 10 views
12

के लिए कस्टम सत्यापन विशेषता कैसे बनाएं मैं एक ईमेल पते के लिए एमवीसी 2 के लिए एक कस्टम सत्यापन विशेषता बनाना चाहता हूं जो RegularExpressionAttribute से प्राप्त नहीं है लेकिन इसका उपयोग क्लाइंट सत्यापन में किया जा सकता है। क्या कोई मुझे सही दिशा दिखा सकता है?एमवीसी

मैं इस के रूप में सरल कुछ करने की कोशिश की:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)] 
public class EmailAddressAttribute : RegularExpressionAttribute 
{ 
    public EmailAddressAttribute() 
     : base(Validation.EmailAddressRegex) { } 
} 

लेकिन यह ग्राहक के लिए काम करने के लिए प्रतीत नहीं होता। हालांकि, अगर मैं RegularExpression (Validation.EmailAddressRegex) का उपयोग करता हूं] यह ठीक काम करता प्रतीत होता है।

+0

आप अपने उदाहरण में 'RegularExpressionAttribute' से विरासत करते हैं? –

+0

मैंने इसे दोनों तरीकों से आजमाया है लेकिन इसे काम पर नहीं लग रहा है। – devlife

+0

क्लाइंट साइड सत्यापन को सक्षम करने के लिए आपको नई विशेषता के लिए एडाप्टर पंजीकृत करने की आवश्यकता है। नीचे मेरा उदाहरण देखें। – JCallico

उत्तर

36

क्लाइंट साइड सत्यापन को सक्षम करने के लिए आपको नई विशेषता के लिए एडाप्टर पंजीकृत करने की आवश्यकता है।

चूंकि RegularExpressionAttribute के पास पहले से ही एडाप्टर है, जो RegularExpressionAttributeAdapter है, आपको बस इसे पुन: उपयोग करना है।

एक ही कक्षा के भीतर सभी आवश्यक कोड रखने के लिए एक स्थिर निर्माता का उपयोग करें।

[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false)] 
public class EmailAddressAttribute : RegularExpressionAttribute 
{ 
    private const string pattern = @"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$"; 

    static EmailAddressAttribute() 
    { 
     // necessary to enable client side validation 
     DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAddressAttribute), typeof(RegularExpressionAttributeAdapter)); 
    } 

    public EmailAddressAttribute() : base(pattern) 
    { 
    } 
} 

अधिक जानकारी के लिए इस प्रक्रिया को पूरी प्रक्रिया समझाते हुए चेकआउट करें। this लेख में सार्वभौमिक आश्रित संपत्ति सत्यापनकर्ता पर http://haacked.com/archive/2009/11/19/aspnetmvc2-custom-validation.aspx

+0

यह रेगेक्स मान्य ईमेल पता "[email protected]" को अमान्य कर देगा – Sean

-1

क्या आपने डेटा एनोटेशन का उपयोग करने का प्रयास किया है?

यह मेरी एनोटेशन प्रोजेक्ट सिस्टम का उपयोग कर रहा है। कॉम्पोनेंट मॉडेल। डेटाएनोटेशन;

public class IsEmailAddressAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
    //do some checking on 'value' here 
    return true; 
    } 
} 

इस में मेरी मॉडल परियोजना

namespace Models 
{ 
    public class ContactFormViewModel : ValidationAttributes 
    { 
     [Required(ErrorMessage = "Please provide a short message")] 
     public string Message { get; set; } 
    } 
} 

यह मेरा नियंत्रक

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult ContactUs(ContactFormViewModel formViewModel) 
{ 
    if (ModelState.IsValid) 
    { 
    RedirectToAction("ContactSuccess"); 
    } 

    return View(formViewModel); 
} 

आप DataAnnotations गूगल के रूप में आप इस परियोजना को पकड़ो और यह संकलन करने की जरूरत की आवश्यकता होगी है। मैं इसे करूँगा लेकिन मुझे यहां एक लंबे डब्ल्यू/एंड के लिए बाहर निकलना होगा।

उम्मीद है कि इससे मदद मिलती है।

संपादित

Found this as a quick google.

+1

लेकिन क्या यह क्लाइंट-साइड पर काम करता है? जहां तक ​​मैं समझता हूं, वैसे ही वह यही पूछ रहा है। –