2009-03-17 14 views
22

को रोक नहीं रहा है मेरे पास एक प्रश्न है कि किसी आवश्यक फ़ील्ड वैलिडेटर को पोस्टबैक को रोकने से रोक सकता है।ASP.net आवश्यक FieldValidator पोस्टबैक

मैं एक पुराने, लेकिन सरल aspx फार्म पर काम करना शुरू किया और मेरे पूर्ववर्ती इस्तेमाल किया मैनुअल, सर्वर साइड फ़ॉर्म सत्यापन (यदि फ़ॉर्म फील्ड एक मूल्य है और एक लेबल में एक त्रुटि संदेश दिखाई नहीं दे रहा है, तो देखने के लिए जाँच)। मैंने सोचा कि मैं कुछ अनियंत्रित कोड साफ़ कर दूंगा और मैन्युअल जांच को RequiredFieldValidator नियंत्रणों से प्रतिस्थापित कर दूंगा, लेकिन जब वे मान्य होने लगते हैं, तो वे पोस्टबैक को रोक नहीं रहे हैं। हां, मुझे अपने त्रुटि संदेश प्रदर्शित होते हैं लेकिन पोस्टबैक अभी भी होता है।

फॉर्म काफी सरल है और कोई कारण नहीं है वैधता = "झूठी" विशेषताएँ सेट हैं।

<asp:TextBox ID="txtPhone" Runat="server" Columns="20" MaxLength="20" /> 
<asp:RequiredFieldValidator ID="rfvPhone" runat="server" Display="Dynamic" 
     ErrorMessage="* Required" ControlToValidate="txtPhone" /> 

मैं सिर्फ एक पाठ बॉक्स, सत्यापनकर्ता के साथ एक ही परियोजना में एक नया वेबफ़ॉर्म बनाया है और सबमिट बटन और यह उसी तरह काम करता है: मेरा नियंत्रण की तरह लग रहे हो। त्रुटि संदेश प्रदर्शित करता है लेकिन पोस्टबैक अभी भी होता है।

क्या कोई वैश्विक या परियोजना-व्यापी सेटिंग है जो इस व्यवहार का कारण बनती है? Web.config या global.asax में कुछ है?

+0

मैं इस समस्या में आया था जब मेरे एएसपी: बटन पर onClientClick घटना से जुड़ा हुआ था। यदि घटनाओं को ऑर्डर करने का तरीका है और एएसपीनेट द्वारा जोड़ा गया एक को पहले मानते हैं कि यह निम्नलिखित घटनाओं को रद्द कर देगा तो यह ठीक होगा। –

उत्तर

31

Whew। ठीक है, मुझे मूल रूप से एक ब्रांड नई परियोजना बनाकर और मेरी पुरानी परियोजना के साथ अपनी web.config लाइन-बाय-लाइन की तुलना करके समस्या मिली। अपराधी पता चला है यह है:

<xhtmlConformance mode="Legacy"/> 

अगर मैं लाइन निकालने के लिए, मेरी मान्यता तरह से मैं यह करने की उम्मीद काम करता है। Googling ने ब्लॉग पोस्ट का एक समूह खोला है कि कैसे VisualStudio वेब.config पर उस पंक्ति को जोड़ता है जब वेब अनुप्रयोगों को .net 1.1 से .NET 3.5 में अपग्रेड करते समय।

ब्लॉग पोस्ट मुख्य रूप से कैसे है कि क्षेत्र .net की AJAX सामान के साथ हस्तक्षेप के बारे में शिकायत कर रहे थे, लेकिन मैं इसे जावास्क्रिप्ट इसी तरह से RequiredFieldValidator के लिए उत्सर्जित के साथ छेड़छाड़ न अनुमान लगा रहा हूँ।

+1

वाह। बस वाह। मैंने इससे पहले कभी कैसे भाग नहीं लिया है? यह एक बड़ा मुद्दा है क्योंकि सर्वर-साइड सत्यापन फायरिंग से किसी भी घटना को रोकता नहीं है, केवल IsValid प्रॉपर्टी सेट करता है। असल में, मैं ASP.NET को कोडिंग कर रहा हूं। : | – Bryan

+0

यह मेरे आवेदन में सत्यापन मुद्दों के कारण के रूप में खोजने के लिए मुझे स्वीकार करने की अपेक्षा से अधिक लंबा रास्ता ले गया। –

+0

मैंने इसे ठीक करने का प्रयास करने में काफी समय लगाया है .... अन्य उपयोगकर्ताओं के लिए एफवाईआई, यह लाइन आईई में ठीक काम करती है, लेकिन क्रोम, एफएफ और ओपेरा के लिए इस फिक्स को हटा रही है। – Botonomous

0

क्या आप RequiredFieldValidator को एक स्पष्ट EnableClientScript="True" पैरामीटर का प्रयास कर सकते हैं?

9

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

सुनिश्चित करें कि आपके पास जावास्क्रिप्ट सक्षम है, और स्पष्ट रूप से "सक्षम क्लाइंटस्क्रिप्ट" को सेट करने का प्रयास करें।

कोड-पीछे में, आपको कभी भरोसा नहीं करना चाहिए कि वैधकर्ता क्लाइंट पर मान्य हैं, और हमेशा "if Page.IsValid" का उपयोग करें।

+0

हम्म ... यह फ़ॉर्म यह सत्यापित करने के लिए कर सकता है कि यह फ़ॉर्म वैध है या नहीं, लेकिन मुझे यह जानकर उत्सुकता है कि यह प्रोजेक्ट वेब प्रोजेक्ट्स की तुलना में अलग तरीके से क्यों व्यवहार कर रहा है। – Dana

+0

कोई भी संभावना है कि आपका वैधकर्ता प्रोग्रामेटिक रूप से दृश्यमान = "झूठा" पर सेट हो रहा है, या आपके बटन क्लिक फॉर्म को कॉलिंग मैन्युअल रूप से जावास्क्रिप्ट से सबमिट कर रहे हैं (जिससे DoPostBackWithOptions() क्लाइंट साइड कॉल को छोड़कर)? – womp

+0

नहीं - मैंने उसी प्रोजेक्ट में परीक्षण करने के लिए एक बिल्कुल नया रूप बनाया है और नया रूप समान व्यवहार प्रदर्शित करता है। – Dana

0

यदि आप फॉर्म सबमिट करने के लिए टेक्स्टबॉक्स के अंदर "एंटर" दबाते हैं, तो मुझे नहीं लगता कि वैधकर्ता पोस्टबैक को रोक देंगे।

4

मुझे एक ही समस्या थी, लेकिन जवाब काफी अलग हो गया। मैं सर्वर-साइड हार्ड कोडेड सत्यापन से .NET सत्यापन के लिए अपग्रेड कर रहा था।

मेरे मामले में मुद्दा एमएसडीएन आलेख URL Rewriting in ASP.NET से उपयोग किए गए एएसपी.नेट रीराइटिंग इंजन से संबंधित है। "एक्शनलेस फॉर्म" के डिफ़ॉल्ट कार्यान्वयन का उपयोग अपराधी था - स्पष्ट रूप से यह एक .NET के पुराने संस्करण के आधार पर लिखा गया था और जावास्क्रिप्ट को उस फॉर्म पर लिखा गया था जो पोस्टबैक को आउटपुट पर नहीं भेजा जा रहा था क्योंकि यह कोड गायब था ।

Public Class Form 
    Inherits System.Web.UI.HtmlControls.HtmlForm 

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
     MyBase.Render(New ActionlessFormHtmlTextWriter(writer)) 
    End Sub 

End Class 

Public Class ActionlessFormHtmlTextWriter 
    Inherits HtmlTextWriter 

    Sub New(ByVal writer As HtmlTextWriter) 
     MyBase.New(writer) 
     Me.InnerWriter = writer.InnerWriter 
    End Sub 

    Sub New(ByVal writer As System.IO.TextWriter) 
     MyBase.New(writer) 
     MyBase.InnerWriter = writer 
    End Sub 

    Public Overrides Sub WriteAttribute(ByVal name As String, ByVal value As String, ByVal fEncode As Boolean) 

     Dim Context As HttpContext = HttpContext.Current 

     'Skip the action attribute of the form control. 
     If Not (name = "action") OrElse Not Context.Items("ActionAlreadyWritten") Is Nothing Then 

      MyBase.WriteAttribute(name, value, fEncode) 

     Else 
      Context.Items("ActionAlreadyWritten") = True 
     End If 
    End Sub 

End Class 

क्या करता है बस है कार्रवाई विशेषता को दबाने, लेकिन किसी भी अनुमति देते हैं:

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

+0

मुझे बिल्कुल वही समस्या थी! पोस्ट करने के लिए धन्यवाद, यह मुझे इस मुद्दे को खोजने के लिए हमेशा के लिए ले जाएगा। – Onisemus

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