2011-11-17 10 views
5

मेरे पास एक सेनारियो है जहां मुझे पंजीकरण पृष्ठ करते समय डेटाबेस में उपयोगकर्ता नाम अस्तित्व की जांच करनी है। इस के लिए मैं अपने मॉडलरिमोट सत्यापन विशेषता में देरी जोड़ना एमवीसी 3

[Remote("CheckUserNameAvaliable", "User", Httpmethod="Post")] 
public string Username {get; set;} 

में दूरदराज के सत्यापन के लिए एक रिमोट गुण को लागू किया है और मेरी विधि की तरह दिखता है इस

[HttpPost] 
public JsonResult CheckUserNameAvaliable(string UserName) 
{ 
    SessionUser currentUser = this.sessionHelper.GetCurrentUser(); 
    User user = this.userService.GetByUsername(UserName); 
    if (user != null && user.Id != currentUser.Id) 
    { 
     return Json(false); 
    } 

    return Json(true); 
} 

यह मेरे लिए ठीक काम करता है, लेकिन समस्या यह जब भी हम एक प्रमुख बना दिया है कि है उपयोगकर्ता नाम टेक्स्टबॉक्स पर यह इस दूरस्थ सत्यापन को फाइल करेगा, लेकिन मेरी आवश्यकता के अनुसार मुझे उपयोगकर्ता नाम टेक्स्टबॉक्स में मूल्य दर्ज करने के बाद ही इस दूरस्थ सत्यापन को आग लगाना होगा। इसके लिए हम दूरस्थ रूप से दूरस्थ सत्यापन विशेषता में देरी जोड़ सकते हैं?

क्या किसी को पता है कि एमवीसी 3 में रिमोट सत्यापन में देरी कैसे जोड़ें?

उत्तर

2

मैं MVC3 और दूरदराज के सत्यापन के साथ पहले इसी तरह की समस्याओं पर पकड़ा गया है। लगता है कि आप घटना कलंक पर सक्रिय होने की लेकिन यकीन है कि कैसे आप दूरदराज के सत्यापन कहेंगे कि नहीं करना चाहता ..

उम्मीद है कि इस में मदद मिलेगी

ASP.NET Remote Validation only on blur?

+0

उत्तर अच्छा है, लेकिन समस्या यह है कि यह वैश्विक रूप से सेट हो रहा है, लेकिन अगर इसे केवल एक विशिष्ट पृष्ठ में निर्दिष्ट करना चाहते हैं तो यह काफी अजीब लगता है। –

+1

आप इसे चयनकर्ता पर डाल सकते हैं: $ ("चयनकर्ता")। मान्य ({onkeyup: false}); –

0

आप KeyUp पर लेकिन कलंक पर मान्य करने के लिए नहीं करना चाहते हैं तो this आप क्या चाहते हैं

+0

जवाब अच्छा है, लेकिन समस्या यह है कि यह वैश्विक स्तर पर स्थापित है, लेकिन अगर इसे केवल एक विशिष्ट पृष्ठ में निर्दिष्ट करना चाहते हैं तो यह काफी अजीब लगता है। –

3

MVC3 ब्राउज़र में jquery.validate प्लगइन का उपयोग करता है । Jquery.validate के साथ, फ़ील्ड सत्यापन पहले फ़ील्ड और फ़ील्ड के धुंध तक शुरू नहीं होता है, या फ़ील्ड को छुआ नहीं होने पर सबमिट करने पर।

एक बार फ़ील्ड सत्यापन फ़ील्ड के लिए शुरू होता है, तो सत्यापनकर्ता की ऑनकीप सेटिंग नियंत्रित करती है कि प्रत्येक कुंजीपटल ईवेंट पर सत्यापन किया जाता है या नहीं। यदि आप प्रत्येक कुंजी प्रेस के साथ किसी फ़ील्ड पर रिमोट सत्यापन कर रहे हैं तो यह शायद क्लाइंट और सर्वर दोनों पर जोर देकर बहुत सारे AJAX संदेश भेज रहा है।

जैसा कि अन्य उत्तरदाताओं ने उल्लेख किया है, आप validator.settings.onkeyup = false को सेट करके कीप प्रमाणीकरण को दबा सकते हैं, लेकिन यह सभी फॉर्म फ़ील्ड पर ऑनकीअप सत्यापन को दबाता है, न केवल दूरस्थ सत्यापन नियम वाले। मेरा सुझाव है कि आप कुंजीपटल दबाएं जबकि दूरस्थ सत्यापन वाले फ़ील्ड पर ध्यान केंद्रित किया गया है और फिर जब आप फ़ील्ड को धुंधला करते हैं तो उसे वापस चालू करें।

ऑनकीप को दबाकर आसान है। समस्या यह है कि सेटिंग को झूठी से सच में बदलना सुविधा को वापस चालू नहीं करता है। इसे वापस चालू करने के लिए आपको $। Validator ऑब्जेक्ट के डिफ़ॉल्ट में परिभाषित फ़ंक्शन पर सेट करने की आवश्यकता है।

यदि आप एमवीसी अविभाज्य सत्यापन का उपयोग कर रहे हैं तो अपने पृष्ठ पर शामिल करने के लिए जावास्क्रिप्ट कोड यहां दिया गया है। यह आपके पृष्ठ पर सभी रूपों को कवर करेगा। और कारण पिछले संस्करणों आईई 7 या 8 के साथ ठीक से काम नहीं jquery.validate संस्करण 1.9.0 या बाद में 'का उपयोग सुनिश्चित करें (हाँ, मैं उन उपयोगकर्ताओं भी समर्थन करने के लिए है):

$("form input[data-val-remote-url]").on({ 
     focus: function() { 
      $(this).closest('form').validate().settings.onkeyup = false; 
     }, 
     blur: function() { 
      $(this).closest('form').validate().settings.onkeyup = 
       $.validator.defaults.onkeyup; 
     } 
    }); 
संबंधित मुद्दे