2015-09-16 6 views
12

में भर नहीं गया है, मुझे लगता है कि यह एक बहुत ही साधारण समस्या हो सकती है लेकिन मेरे जीवन के लिए इसे समझ नहीं सकता है।कस्टम सत्यापनकर्ता फायरिंग नहीं कर रहा है अगर नियंत्रण

मैं एक एएसपी है: पाठ बॉक्स। मेरे पास एक कस्टम सत्यापनकर्ता है जिस पर क्लाइंट और सर्वर साइड सत्यापन है।

यहाँ कोड है:

<asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox> 

<asp:CustomValidator ID="vldFirstName" runat="server" ControlToValidate="txtFirstName" 
    ClientValidationFunction="ValidateName" OnServerValidate="vldFirstName_ServerValidate" 
    Text="Please put in your first name" ErrorMessage="First name missing" 
    ForeColor="Red" font-bold="true" Display="Dynamic" 
    ValidateEmptyText="true"> 
</asp:CustomValidator> 

यह सही ढंग से सर्वर साइड पर मान्य करता है, तो मैं बस अपना पेज में सीधे जाओ और सबमिट करें क्लिक करें, पाठ बॉक्स खाली छोड़ देगा।

ग्राहक साइड सत्यापन के साथ हालांकि। अगर मैं बॉक्स में जाता हूं और कुछ भी टाइप किए बिना सीधे बाहर आ जाता हूं। जावास्क्रिप्ट सत्यापन आग नहीं है। अगर मैं कुछ टाइप करता हूं तो बॉक्स छोड़ दो। वापस जाएं और फिर सत्यापन कार्य बॉक्स को साफ़ करें। यह वापस आता है कि यह खाली है।

हालांकि मैं इसे बॉक्स में जाने के तुरंत बाद चाहता हूं और इसे सत्यापन कर दूंगा। मुझे यकीन नहीं है कि टेक्स्टबॉक्स छेड़छाड़ किए जाने पर वैधकर्ता फायरिंग क्यों नहीं कर रहा है।

+2

यह 'ValidateName' कोड देखने में मदद कर सकता है। – stuartd

+0

@stuartd, सत्यापन कोड इस समय बस इतना आसान है कि लंबाई 3 की जांच हो और मूल्य शून्य न हो। मैंने इसे डीबग किया है और हर बार कोड को क्लाइंट साइड कहा जाता है। जब मैंने कुछ डाल दिया है और फिर इसे हटा दिया है तो ठीक काम करता है। लेकिन आग लगती है अगर इसे – Sam

+0

के माध्यम से छोड़ दिया गया है तो 'ValidateName' का कहना है कि इनपुट मूल्य कब छोड़ा जाता है और कब हटाया जाता है? – LGSon

उत्तर

4

अपने वेबफ़ॉर्म में कहीं भी नीचे स्क्रिप्ट रखो, और यह जिस तरह से आप चाहते हैं काम करेगा:

document.addEventListener('DOMContentLoaded', function() { 
    [].forEach.call(document.querySelectorAll('input'), function(el, i) { 
    el.addEventListener('blur', ValidatorOnChange); 
    }); 
}); 

सत्यापनकर्ता, मूल रूप से जिस तरह से आप चाहते हैं काम नहीं करता है, क्योंकि यह करने के लिए एक onchange ईवेंट हैंडलर attachs टेक्स्टबॉक्स, इसलिए, यदि आप टेक्स्ट को बिल्कुल नहीं बदलते हैं, तो आपको सत्यापन प्राप्त नहीं होता है।

लेकिन यदि आप सभी टेक्स्टबॉक्स को एक ही घटना onblur को ट्रिगर करने के लिए मजबूर करते हैं, तो, यदि आपने टेक्स्ट बदल दिया है या नहीं, तो यह सत्यापन को ट्रिगर करेगा, और यही वह उपरोक्त स्क्रिप्ट है: उस ईवेंट हैंडलर को जोड़ना पृष्ठ में सभी टेक्स्टबॉक्स, और जब यह होता है तो ValidatorOnChange फ़ंक्शन को कॉल करना।

नोट: यदि आपके पास पहले से ही कोई भी स्क्रिप्ट है जिसे आपके एप्लिकेशन में आपके वेबफॉर्म में बुलाया गया है, और आप यह व्यवहार हर जगह काम करना चाहते हैं, तो आप उस स्क्रिप्ट में कोड जोड़ सकते हैं (कहीं भी इसके अंदर), और समाधान आपके सभी वेबफॉर्म पर प्रचारित होगा।

+1

में कुछ टाइप नहीं किया गया है जो पूरी तरह से काम करता है। धन्यवाद – Sam

2

मैं अनिश्चित क्लाइंट सत्यापन के साथ कि कोड, परीक्षण किया है, और मान्यता ठीक से आग नहीं किया।

  1. पृष्ठ लोड पर::

    मैं अबाधित तत्वों को जोड़ दिया है (या फिर भी आप इसे सक्रिय करना चाहते हैं)

    protected void Page_Load(object sender, EventArgs e) 
    { 
        Page.UnobtrusiveValidationMode = UnobtrusiveValidationMode.WebForms; 
    } 
    
  2. सुनिश्चित करें jQuery लोड किया जाता है:

global.asax पर:

protected void Application_Start(object sender, EventArgs e) 
     { 
      ScriptManager.ScriptResourceMapping.AddDefinition("jquery", 
      new ScriptResourceDefinition 
     { 
      Path = "~/scripts/jquery-2.1.4.min.js", 
      DebugPath = "~/scripts/jquery-2.1.4.js", 
      CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.0.min.js", 
      CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.0.js" 
     }); 
     } 

इन दो अपडेट किए जाने के बाद (और मेरे पास एक सबमिट बीटीएन है) यह अच्छी तरह से काम करता है।

SO, जांचें कि क्या आप अनबन्धित सत्यापन लोड करते हैं और आप jquery लोड हो चुके हैं।

2

आप

कॉल करने के लिए करता है, तो (Page.IsValid)

सर्वर पर पोस्टबैक पर

, अन्यथा आपके सर्वर सत्यापन नहीं कहा जा होगा। RequiredFieldValidator क्लाइंट पर मान्य करता है, यही कारण है कि यह काम कर रहा है। हालांकि आपको हमेशा सर्वर पर भी मान्य होना चाहिए।

क्लाइंट साइड सत्यापन के लिए आपको एक जावास्क्रिप्ट विधि लिखना है। आप अपने CustomValidator में विशेषता निर्धारित:

ClientValidationFunction = "YourValidationMethod"

और विधि इस

function YourValidationMethod(source, args) 
{ 

    if (valid) // do check here 
    args.IsValid = true; 
    else 
    args.IsValid = false; 
} 
+0

यदि मैं वापस पोस्ट करता हूं तो सर्वर की तरफ ठीक काम करता है। यह क्लाइंट पक्ष है जो कि – Sam

2

मेरा मानना ​​है कि CustomValidators डिजाइन द्वारा RequiredFieldValidators से अलग से कार्य करने के लिए करना है ऐसा ही कुछ होता है, और उनके लिए खाली जगहों पर आग लगाना सामान्य नहीं है।

+1

पर टेक्स्टबॉक्स में कभी भी कुछ भी नहीं था, हालांकि यह डिफ़ॉल्ट रूप से खाली फ़ील्ड पर नहीं फंस जाएगा, लेकिन यदि आप वैध पर ValidateEmptyText निर्दिष्ट करते हैं तो इसे हर समय – Viru

2

आह, एएसपी की खुशियों।नेट वेबफॉर्म :)

यदि आप अन्य नियंत्रणों का उपयोग कर रहे हैं, जैसे कि रेडकंट्रोल जो jquery के अपने संस्करण के साथ शिप करते हैं, यह एक मुद्दा हो सकता है, सुनिश्चित करें कि फ्रेम को उनके अक्षम करने के द्वारा भेजे गए एक का उपयोग करना सुनिश्चित करें।

वैकल्पिक रूप से आप web.config में अविभाज्य सत्यापन बंद कर सकते हैं और देख सकते हैं कि यह खाली होने पर इसे आग लगती है या नहीं।

<appSettings> 
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" /> 
</appSettings> 
+0

फ्रेमवर्क संस्करण का उपयोग करना चाहिए। कोशिश की और कोई अलग नहीं। एक नई परियोजना बनाई कस्टम सत्यापनकर्ता के साथ एक टेक्स्टबॉक्स जोड़ा गया है, लेकिन जब तक कुछ खोया गया फोकस नहीं किया जाता है तब तक यह तब तक नहीं फंस जाएगा जब मैं पाठ को हटा सकता हूं और यह ठीक से आग लग जाएगा – Sam

2

प्रति MSDN डॉक्स ... मैं validateEmptyText = सच संपत्ति है यह कस्टम मान्यता (validateName javascipt समारोह) ट्रिगर किया जाएगा, भले ही टेक्स्ट बॉक्स खाली है के बारे में क्या uderstand के रूप में।

उस लोडबॉक्स के लिए पहले लोड मान पर अनिश्चित है, लेकिन जब आप इसे संपादित और पूर्ववत करते हैं तो टेक्स्टबॉक्स का मान खाली हो जाएगा। (अपरिभाषित नहीं) यही कारण है कि जब आप संपादित करते हैं और पूर्ववत करते हैं तो पूर्व में लोड नहीं होता है ।

एक तरह से प्रपत्र

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

+0

अभी भी वही नहीं है। एक आवश्यक फ़ील्ड सत्यापनकर्ता जोड़ने का प्रयास किया, और पेज_लोड में 'String.Empty; 'होने के लिए सेटिंग सेट करने का प्रयास किया, फिर भी वही करता है। मान्य नहीं होगा जब तक कि पहले – Sam

संबंधित मुद्दे