2012-02-14 18 views
5

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

अंक: मैं शिपिंग नाम में पाठ को हटा दें और मैं कहीं और क्लिक न करें, तो मैं चेकबॉक्स करने के लिए जाने का कहना है की सुविधा देता है एक पल के लिए "बिलिंग के रूप में एक ही" यह लाल रंग में मान्यता से पता चलता है और फिर इसे गायब हो जाता है। मैं एक समारोह है कि यानी

RequireFieldValidator1.Enabled = false; 

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

तो मैं इस तर्क किया:

if (ckSameBilling.checked) 
{ 
    RequiredFieldValidator.Enabled = false; 
} 
else 
{ 
     RequiredFieldValidator.Enabled = true; 
} 

लेकिन अब ऐसा लगता है जैसे मैं ऊपर demostrated, स्पष्ट शिपिंग नाम और checbox क्लिक करें .. मैं लाल सत्यापन क्षण भर के देख सकते हैं एक ही व्यवहार करने के लिए वापस चला गया।

संबंधित कोड

//All this is wrapped in an update panel 
<asp:Panel ID="pnl" runat="server"><div> 
    asp:TextBox ID="txtShippingFirstName" runat="server" Width="130px" Columns="30" 
    MaxLength="100" asp:TextBox><div> 

<asp:RequiredFieldValidator ID="Requiredfieldvalidator1" ErrorMessage="Name Required" 
    ControlToValidate="txt" 
    runat="server" Display="Dynamic" CssClass="Error"> 
</asp:RequiredFieldValidator> 
</asp:Panel> 

<div style="margin-left: 145px;"> 
    <asp:CheckBox ID="Billing" runat="server" Font-Bold="True" 
     Text"Same as Billing" OnCheckedChanged="Billing_CheckedChanged" 
     AutoPostBack="True" /> 
</div> 

codebehind:

protected void Billing_CheckedChanged(object sender, EventArgs e) 
{  
    if (Billing.Checked) 
    { 
     //Disable the shipping fields validations 
     DisableEnable(true); 
     pnl.Visible = false; 
    } 
    else 
    { 
     DisableEnable(false); 
     pnl.Visible = true; 
    } 
} 

private void DisableEnable(bool enable) 
{ 
    if (enableFields) 
    { 
     Requiredfieldvalidator1.Enabled = false; 
     //a bunch of required validations below... 
    } 
    else 
    { 
     Requiredfieldvalidator1.Enabled = true; 
     //a bunch of required validations below.. 
    } 
} 

उत्तर

5

क्या आपने UpdatePanel के पोस्टबैक करने से पहले जावास्क्रिप्ट (सर्वर पक्ष नहीं) में वैधताओं को अक्षम करने का प्रयास किया है?

आप अपने प्रमाणकों को निष्क्रिय करने के लिए निम्न समारोह क्लाइंट पक्ष का उपयोग कर सकते हैं:

var yourValidator = document.getElementById('yourValidatorClientID') 
ValidatorEnable(yourValidator, false); 

यह बंद कर देना चाहिए कि सत्यापन के 'फ्लैश'। आप इसे अपने CheckBox क्लाइंट पक्ष में बदल सकते हैं।

आप प्रत्येक अनुभाग के लिए अलग-अलग समूहों में अपने सभी वैधकर्ताओं को भी शामिल कर सकते हैं और फिर सत्यापनकर्ताओं के एक पूरे समूह को एक साथ अक्षम कर सकते हैं। अतः अधिक जानकारी के लिए थ्रेड निम्न देखें:

Enable/disable asp.net validator controls within a specific "ValidationGroup" with jQuery?

+0

jquery दृष्टिकोण का उपयोग करके, बहुत बहुत धन्यवाद .. मैं इसमें एक गुरु नहीं हूं लेकिन मैं कैसे कर सकता हूं jquery में चेकबॉक्स की स्थिति की जांच करें? (चाहे यह चेक किया गया हो या नहीं)? एक बार फिर आपका धन्यवाद – user710502

0
private void DisableEnableShippingFieldsValidations(bool enableFields) 
{ 
    if (enableFields) 
     ckBilling.CausesValidation = false; 
    else 
     ckBilling.CausesValidation = true; 
} 

चेकबॉक्स के कारणों सत्यापन संपत्ति का उपयोग करके आप सत्यापन पारित करके कर रहे हैं।


सुझाव

सत्यापन करते समय, नियंत्रण को मान्य करने के लिए और बटन/चेक बॉक्स जो सत्यापन करना होगा के लिए मान्यता समूह संपत्ति का उपयोग करें।

+0

क्यों नहीं फिर से लिखें एक पंक्ति है कि विधि: 'ckSameBilling.CausesValidation = enableFields;'!? मेरे अनुभव में, एकाधिक कोड पथ डेटा पर निर्भर कोड कोड से पढ़ने के लिए बहुत कठिन है।(अगर मैं किसी और ने उदाहरणों के समर्थन के बिना इसे लिखा है, तो मैं _laugh_ करूंगा, लेकिन यहां एकदम सही सहायक उदाहरण है! :) – sarnold

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

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