2012-12-07 21 views
34

मेरे पास RequiredFieldValidator के साथ निम्न कोड है। EnableClientScript संपत्ति सत्यापन नियंत्रण में "झूठी" के रूप में सेट की गई है। इसके अलावा मैंने ब्राउज़र में स्क्रिप्ट अक्षम कर दी है।पेज कैसे करता है। यह वैध काम करता है?

मैं पीछे कोड में Page.IsValid का उपयोग नहीं कर रहा हूं। फिर भी, जब मैं टेक्स्टबॉक्स में किसी भी मूल्य के बिना सबमिट करता हूं तो मुझे error message मिल जाएगा।

@ दाई की टिप्पणियों से, मुझे पता चला कि Page_Load में कोई कोड है जो postback में निष्पादित किया गया है, तो यह एक मुद्दा हो सकता है। कोई सत्यापन त्रुटियां फेंक दी जाएगी।

if (Page.IsPostBack) 
{ 
    string value = txtEmpName.Text; 
    txtEmpName.Text = value + "Appended"; 
} 

प्रश्न

  1. क्यों सर्वर साइड सत्यापन Page_Load से पहले ऐसा नहीं होता है (हालांकि, बटन क्लिक हैंडलर के लिए, वहाँ Page.IsValid जाँच करने के लिए कोई जरूरत नहीं है)?
  2. जब मैं Page.IsValid का उपयोग करता हूं तो यह ठीक क्यों काम करता है?
  3. क्या आप इस आलेख का कोई संदर्भ प्रदान कर सकते हैं जो इसे समझाता है? (नहीं है कि कहते हैं - हमेशा Page.IsValid का उपयोग, लेकिन कुछ का कहना है कि क्या अनिवार्य परिदृश्य दिए गए हैं केवल चलाने के बाद उपयोग करने के लिए Page.IsValid

अद्यतन 1

देखें ASP.NET Validators Common Misconception

Page.IsValid पहुँचा जा सकता है Page.Validate() विधि जिसे Page_Load के बाद कहीं भी बुलाया जाता है। यदि आप अपने सभी तर्क को पेज_लोड ईवेंट हैंडलर में रखते हैं (जो अत्यधिक डिस्को है uraged!), Page.IsValid की जांच करने से पहले Page.Validate() पर कॉल करें।

नोट: यह की सलाह दी है Page_Load में सब तर्क रखने के लिए नहीं। यदि बटन क्लिक ईवेंट पर कुछ होता है, तो इसे बटन पर ईवेंट ईवेंट हैंडलर पर ले जाएं। यदि ड्रॉप-डाउन ईवेंट पर कुछ घटित होता है, तो उसे चयनित आइटम चेंज इवेंट हैंडलर ड्रॉप-डाउन पर ले जाएं।

अद्यतन 2

ऐसा लगता है, हम भी अगर हम सर्वर साइड सत्यापन के साथ एक Custom Validator उपयोग कर रहे हैं button click में If(Page.IsValid) जोड़ने की जरूरत है। CustomValidator not working well देखें।

नोट: ग्राहक साइड सत्यापन प्रश्न यहाँ मौजूद है: Whether to use Page_IsValid or Page_ClientValidate() (for Client Side Events)

मार्कअप

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script type="text/javascript"> 
    alert('haiii'); 
</script> 

</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <asp:ValidationSummary runat="server" ID="vsumAll" DisplayMode="BulletList" CssClass="validationsummary" ValidationGroup="ButtonClick" /> 
    <asp:TextBox ID="txtEmpName" runat="server"></asp:TextBox> 
    <asp:RequiredFieldValidator ID="valEmpName" runat="server" ControlToValidate="txtEmpName" 
     EnableClientScript="false" ErrorMessage="RequiredFieldValidator" Text="*" Display="Dynamic" 
     ValidationGroup="ButtonClick"></asp:RequiredFieldValidator> 
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="ButtonClick" /> 
</div> 
</form> 
</body> 
</html> 

कोड के पीछे

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string value = txtEmpName.Text; 
    SubmitEmployee(value); 
} 

संदर्भ:

  1. Should I always call Page.IsValid?
  2. ASP.NET Validation Controls – Important Points, Tips and Tricks
  3. CustomValidator not working well
+2

http://stackoverflow.com/questions/1039465/should-i-always-call-page-isvalid –

+0

@MassimilianoPeluso यह प्रश्न समान है लेकिन एक ही समस्या को संबोधित नहीं करता है। इसे कहते हैं "Page.IsValid बुला भले ही कोई भी मान्यता नियंत्रण पृष्ठ पर हैं"। – Lijo

+1

आप हमें अपने codebehind तर्क दिखाने की जरूरत है लेकिन मैं अपने पेज में मान्यता नियंत्रण है। कैसे आप अपने कोड लिखा है पर निर्भर करता है यह या 'जाँच करने के लिए IsValid' आवश्यक नहीं हो सकता हो सकता है। उदाहरण के लिए, अपने तर्क एक बटन क्लिक हैंडलर है कि केवल शुरू हो जाती है, तो पेज मान्य है, तो 'IsValid' जांच परदे के पीछे किया जाता है, लेकिन में है अगर आपके तर्क' 'द्वारा सुरक्षित Page_Load' में है अगर अगर (IsPostback); का सत्यापन(); अगर (IsValid) 'तो आपको वास्तव में संपत्ति की जांच करने की आवश्यकता है। – Dai

उत्तर

34

मान्यता Page_Load के बाद होता है, लेकिन घटना संचालकों से पहले (http://msdn.microsoft.com/en-us/library/ms178472(v=VS.100).aspx देखें)।

अपने बटन सत्यापन का कारण नहीं है, तो आप मैन्युअल रूप से सक्रिय होना चाहिए Page.Validate.

आप के बाद जब तक Page.IsValid पूछताछ नहीं हो सकता है (1) आप Page.Validate या (2) एक नियंत्रण का कारण बनता है कि सत्यापन के/शामिल स्रोत था बुलाया एक पोस्टबैक में

आप ईवेंट हैंडलर्स आग से पहले होने की सत्यापन की आवश्यकता है, तो आप उपयोग कर सकते हैं:

if (Page.IsPostback) 
{ 
    Page.Validate(/*Control Validation Group Name Optional*/); 
    if (Page.IsValid) 
    { 
     //Do some cool stuff 
    } 
} 

तुम भी तो पुनः रचना आपको ऐसा करने की आवश्यकता नहीं है पर विचार कर सकते।

एक ईवेंट हैंडलर है कि एक नियंत्रण जो सत्यापन का कारण बनता है संभालती में, Page.IsValid उपलब्ध होने की गारंटी है। अन्य सभी मामलों में, सत्यापन के दोबारा अनुरोध करना आम तौर पर सुरक्षित होता है।

void btnSubmit_Click(object sender, EventArgs e) 
{ 
    this.UpdateGUIWithSubmitRequest(); 
    if (Page.IsValid) 
    { 
     this.ProcessSuccessfulSubmission(); 
    } 
    else 
    { 
     this.ProcessInvalidSubmission(); 
    } 
} 

आप एक CustomValidator एक बहुत ही महंगा सत्यापन कदम है कि का उपयोग कर रहे हैं, तो आप फिर से करने की जरूरत नहीं है HttpResponse.Cache में परिणाम कैशिंग विचार कर सकते हैं: एक रूप प्रमाणकों है पर प्रस्तुतियाँ से निपटने के लिए एक मॉडल मान्य करें अगर पृष्ठ पर एकाधिक कॉल। वैधता होती है।

void CustomValidator_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
    CustomValidator self = (CustomValidator)source; 
    string validatorResultKey = self.ClientID; 
    bool? validatorResult = Context.Items[validatorResultKey] as bool?; 
    if (validatorResult.HasValue) 
    { 
     args.IsValid = validatorResult.Value; 
     return; 
    } 

    bool isValid = this.DoSomethingVeryTimeConsumingOrExpensive(); 
    Context.Items[validatorResultKey] = isValid; 
    args.IsValid = isValid; 
} 

यह, ज़ाहिर है, अपने वास्तुकला पर 100% निर्भर करता है और चाहे या नहीं आप ग्रहण करने के लिए है कि एक से पारित कर दिया/विफल सत्यापन प्रारंभिक सत्यापन के दौरान अभी भी गुजरता है/एक ही पृष्ठ जीवन चक्र के बाद के सत्यापन के दौरान विफल रहता है में सक्षम हैं।

+0

क्या आप कहते हैं कि" यदि आपका बटन सत्यापन का कारण नहीं है "तो क्या आप कहते हैं" – Lijo

+1

हां, लेकिन एक चेतावनी है। यदि 'कारण सत्यापन' 'झूठा 'है, लेकिन' उपयोग सबमिट करें ' 'सच है ', मैं निश्चित रूप से कुछ सत्यापन sti निश्चित रूप से निश्चित हूँ ll होगा मुझे अभी इस पर कोई अच्छा संदर्भ नहीं मिल रहा है, लेकिन मेरा मानना ​​है कि मैंने इस तरह की स्थिति में भाग लिया है। शायद एसओ पर कोई टिप्पणी कर सकता है कि यह वास्तव में मामला है या नहीं। –

+0

यदि आप केवल वैध पृष्ठ पर कार्रवाई करना चाहते हैं तो आपको केवल 'पेज.इस्वालिड' की जांच करनी होगी। बहुत वास्तविक उपयोग के मामले हैं जहां आप एक क्लिक पर 100% समय कुछ करना चाहते हैं, और कुछ और वैधकर्ता पास होने पर कुछ और करना चाहते हैं। मैं अपने जवाब पर सिर्फ थोड़ी सी किक्स के लिए विस्तार करूंगा। –

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