मैं ASP.NET फॉर्म पर एक चेकबॉक्स कैसे बना सकता हूँ?


112

मैंने इस पर कुछ खोज की है, और मुझे कई आंशिक जवाब मिले हैं, हालांकि कुछ भी नहीं जो मुझे गर्म फजी देता है "यह ऐसा करने का सही तरीका है"। इस सवाल के खिलाफ सबसे अधिक बार होने वाली शिकायत का जवाब देने के लिए: "चेकबॉक्स में दो वैध राज्य हो सकते हैं - चेक और अनियंत्रित", यह एक "मैं नियम और शर्तों को स्वीकार करता हूं ..." चेकबॉक्स जिसे एक पंजीकरण पूरा करने के लिए चेक किया जाना चाहिए, इसलिए एक व्यावसायिक तर्क दृष्टिकोण से बॉक्स की जांच करना आवश्यक है।

कृपया अपनी प्रतिक्रिया के साथ पूर्ण कट-एन-पेस्ट तैयार कोड टुकड़े प्रदान करें! मुझे पता है कि इसके कई टुकड़े हैं - CustomValidator (संभवतः), कोड-पीछे, कुछ जावास्क्रिप्ट और संभवतः IsValid के लिए एक चेक, और मेरे लिए निराशाजनक हिस्सा यह है कि प्रत्येक उदाहरण में मैंने देखा है, इन महत्वपूर्ण में से एक टुकड़े गायब है!

जवाबों:


216

ग्राहक पक्ष सत्यापन के लिए जावास्क्रिप्ट फ़ंक्शन (jQuery का उपयोग करके) ...

function CheckBoxRequired_ClientValidate(sender, e)
{
    e.IsValid = jQuery(".AcceptedAgreement input:checkbox").is(':checked');
}

सर्वर साइड सत्यापन के लिए कोड-पीछे ...

protected void CheckBoxRequired_ServerValidate(object sender, ServerValidateEventArgs e)
{
    e.IsValid = MyCheckBox.Checked;
}

चेकबॉक्स और सत्यापनकर्ता के लिए ASP.Net कोड ...

<asp:CheckBox runat="server" ID="MyCheckBox" CssClass="AcceptedAgreement" />
<asp:CustomValidator runat="server" ID="CheckBoxRequired" EnableClientScript="true"
    OnServerValidate="CheckBoxRequired_ServerValidate"
    ClientValidationFunction="CheckBoxRequired_ClientValidate">You must select this box to proceed.</asp:CustomValidator>

और अंत में, आपके पोस्टबैक में - चाहे एक बटन से या जो भी ...

if (Page.IsValid)
{
    // your code here...
}

मैं शायद कुछ गलत कर रहा हूं। मैं अपने अंत में जांच करना जारी रखूंगा, हालांकि ControlToValidate = "<id-of-checkbox-control>" थ्रो अपवाद "नियंत्रण" आईडी-ऑफ-चेकबॉक्स-कंट्रोल> ControlToValidate संपत्ति द्वारा संदर्भित नहीं किया जा सकता है। " जो जावास्क्रिप्ट को तोड़ता है, आदि
बॉब काफमैन

2
आह, ठीक है। बस इसे हटा दें - चेकबॉक्स इसे टाई करने के लिए सही इंटरफ़ेस को लागू नहीं करता है। सत्यापनकर्ता अभी भी उस संपत्ति के सेट के बिना ठीक चलेगा। मैं अपने उदाहरण के अनुसार अद्यतन करूँगा।
स्कॉट Ivey

2
जावास्क्रिप्ट फ़ंक्शन नाम के लिए CustomValidator पैरामीटर 'ClientValidationFunction' होना चाहिए, न कि 'OnClientValidate'। देखें: msdn.microsoft.com/en-us/library/9eee01cx(v=VS.100).aspx
Chris

1
मैं सुझाव देना चाहूंगा कि आप किस तत्व को प्रभावित करने का प्रयास कर रहे हैं, jQuery("#<%= MyCheckBox.ClientID %>")इसके बजाय jQuery(".AcceptedAgreement input:checkbox")अधिक स्पष्ट होने का उपयोग करें ।
जेसी वेब

3
मैंने शुरू में ध्यान नहीं दिया कि कोई ControlToValidate विशेषता नहीं है। इस विशेषता को शामिल करना एक अपवाद का कारण बनता है, इसलिए दूसरों को चेतावनी का एक शब्द जो भी याद आ सकता है।
MicrosoftAccessPros.com

19

Andrew के उत्तर का # संस्करण:

<asp:CustomValidator ID="CustomValidator1" runat="server" 
        ErrorMessage="Please accept the terms..." 
        onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
    <asp:CheckBox ID="CheckBox1" runat="server" />

कोड के पीछे:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
    args.IsValid = CheckBox1.Checked;
}

सी # संस्करण के लिए धन्यवाद। कोड को कम से कम करने का भी अच्छा उपयोग।
andrewWinn

13

यदि आप एक सच्चे सत्यापनकर्ता चाहते हैं जो jquery पर भरोसा नहीं करता है और साथ ही सर्वर साइड सत्यापन को संभालता है (और आप कर सकते हैं। सर्वर साइड सत्यापन सबसे महत्वपूर्ण हिस्सा है) तो यहां एक नियंत्रण है

public class RequiredCheckBoxValidator : System.Web.UI.WebControls.BaseValidator
{
    private System.Web.UI.WebControls.CheckBox _ctrlToValidate = null;
    protected System.Web.UI.WebControls.CheckBox CheckBoxToValidate
    {
        get
        {
            if (_ctrlToValidate == null)
                _ctrlToValidate = FindControl(this.ControlToValidate) as System.Web.UI.WebControls.CheckBox;

            return _ctrlToValidate;
        }
    }

    protected override bool ControlPropertiesValid()
    {
        if (this.ControlToValidate.Length == 0)
            throw new System.Web.HttpException(string.Format("The ControlToValidate property of '{0}' is required.", this.ID));

        if (this.CheckBoxToValidate == null)
            throw new System.Web.HttpException(string.Format("This control can only validate CheckBox."));

        return true;
    }

    protected override bool EvaluateIsValid()
    {
        return CheckBoxToValidate.Checked;
    }

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        if (this.Visible && this.Enabled)
        {
            System.Web.UI.ClientScriptManager cs = this.Page.ClientScript;
            if (this.DetermineRenderUplevel() && this.EnableClientScript)
            {
                cs.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "cb_verify", false);
            }
            if (!this.Page.ClientScript.IsClientScriptBlockRegistered(this.GetType().FullName))
            {
                cs.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, GetClientSideScript());
            } 
        }
    }

    private string GetClientSideScript()
    {
        return @"<script language=""javascript"">function cb_verify(sender) {var cntrl = document.getElementById(sender.controltovalidate);return cntrl.checked;}</script>";
    }
}

यह एकमात्र उत्तर है जो प्रत्येक ऑब्जेक्ट में 1 फ़ंक्शन की आवश्यकता के बजाय एक से अधिक चेकबॉक्स पर काम करेगा। हुज़्ज़ाह!
१०:४० बजे हलिफ़क्स

आपका बहुत बहुत धन्यवाद। मुझे कई गतिशील रूप से प्रदान किए गए नियंत्रणों के साथ ऐसा करने के लिए एक तरीके की आवश्यकता थी। बहुत बढ़िया।
schmosef

जबकि स्कॉट से चयनित समाधान सही / मान्य है, मेरा मानना ​​है कि यह अधिक पूर्ण समाधान है। इस कस्टम नियंत्रण को फ्रेमवर्क में बेक किया जाना चाहिए था। धन्यवाद सिरसबस!
गाबे

5

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

.Ascx:

<script type="text/javascript">

    function checkAgreement(source, args)
    {                
        var elem = document.getElementById('<%= chkAgree.ClientID %>');
        if (elem.checked)
        {
            args.IsValid = true;
        }
        else
        {        
            args.IsValid = false;
        }
    }

    function checkAge(source, args)
    {
        var elem = document.getElementById('<%= chkAge.ClientID %>');
        if (elem.checked)
        {
            args.IsValid = true;
        }
        else
        {
            args.IsValid = false;
        }    
    }

</script>

<asp:CheckBox ID="chkAgree" runat="server" />
<asp:Label AssociatedControlID="chkAgree" runat="server">I agree to the</asp:Label>
<asp:HyperLink ID="lnkTerms" runat="server">Terms & Conditions</asp:HyperLink>
<asp:Label AssociatedControlID="chkAgree" runat="server">.</asp:Label>
<br />

<asp:CustomValidator ID="chkAgreeValidator" runat="server" Display="Dynamic"
    ClientValidationFunction="checkAgreement">
    You must agree to the terms and conditions.
    </asp:CustomValidator>

<asp:CheckBox ID="chkAge" runat="server" />
<asp:Label AssociatedControlID="chkAge" runat="server">I certify that I am at least 18 years of age.</asp:Label>        
<asp:CustomValidator ID="chkAgeValidator" runat="server" Display="Dynamic"
    ClientValidationFunction="checkAge">
    You must be 18 years or older to continue.
    </asp:CustomValidator>

और कोडबेहिंद:

Protected Sub chkAgreeValidator_ServerValidate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles chkAgreeValidator.ServerValidate
    e.IsValid = chkAgree.Checked
End Sub

Protected Sub chkAgeValidator_ServerValidate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ServerValidateEventArgs) _
Handles chkAgeValidator.ServerValidate
    e.IsValid = chkAge.Checked
End Sub

3

मैं आमतौर पर ग्राहक पक्ष पर सत्यापन करता हूं:

<asp:checkbox id="chkTerms" text=" I agree to the terms" ValidationGroup="vg" runat="Server"  />
<asp:CustomValidator id="vTerms"
                ClientValidationFunction="validateTerms" 
                ErrorMessage="<br/>Terms and Conditions are required." 
                ForeColor="Red"
                Display="Static"
                EnableClientScript="true"
                ValidationGroup="vg"
                runat="server"/>

<asp:Button ID="btnSubmit" OnClick="btnSubmit_Click" CausesValidation="true" Text="Submit" ValidationGroup="vg" runat="server" />

<script>
    function validateTerms(source, arguments) {
        var $c = $('#<%= chkTerms.ClientID %>');
        if($c.prop("checked")){
            arguments.IsValid = true;
        } else {
            arguments.IsValid = false;
        }
    }
</script>       

सबसे अच्छे समाधानों में से एक है क्योंकि यह पोस्टबैक नहीं है।
नू एवरेस्ट

इसके साथ समस्या यह है कि सत्यापनकर्ता संदेश गायब नहीं होता है यदि आप सबमिट करते हैं, तो बॉक्स को आज़माएं और जांचें।
MC9000

-1

गैर-जावास्क्रिप्ट तरीका। । aspx पृष्ठ:

 <form id="form1" runat="server">
<div>
    <asp:CheckBox ID="CheckBox1" runat="server" />
    <asp:CustomValidator ID="CustomValidator1"
        runat="server" ErrorMessage="CustomValidator" ControlToValidate="CheckBox1"></asp:CustomValidator>
</div>
</form>

कोड के पीछे:

Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
    If Not CheckBox1.Checked Then
        args.IsValid = False
    End If
End Sub

किसी भी कार्य के लिए आपको (व्यावसायिक नियमों) की आवश्यकता हो सकती है:

If Page.IsValid Then
   'do logic
End If 

VB कोड के लिए क्षमा करें। । । आप इसे C # में बदल सकते हैं यदि वह आपकी खुशी है। जिस कंपनी के लिए मैं अभी काम कर रहा हूँ, उसके लिए VB की आवश्यकता है :(


3
यह काम नहीं करेगा, क्योंकि आप सत्यापनकर्ता को चेकबॉक्स में संलग्न नहीं कर सकते हैं! DOOOH!
0xDEAD BEEF
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.