আমি কীভাবে একটি এএসপি.নেট ফর্মটিতে একটি চেকবক্স তৈরি করব?


112

আমি এটি সম্পর্কে কিছু অনুসন্ধান করেছি এবং আমি বেশ কয়েকটি আংশিক উত্তর পেয়েছি, তবে এমন কিছু যা আমাকে উষ্ণ अस्पष्ट "এটি করার সঠিক উপায় এটি" দেয় না। এই প্রশ্নের বিরুদ্ধে সবচেয়ে ঘন ঘন অভিযোগ আসার উত্তর দেওয়ার জন্য: "চেকবক্সগুলিতে দুটি বৈধ রাষ্ট্র থাকতে পারে - চেক করা এবং চেক না করা", এটি একটি "আমি শর্তাদি এবং শর্তাদি স্বীকার করি ..." চেকবক্স যা নিবন্ধকরণ সম্পন্ন করার জন্য অবশ্যই চেক করা উচিত, তাই ব্যবসায়ের লজিক দৃষ্টিকোণ থেকে বাক্সটি পরীক্ষা করা প্রয়োজন।

আপনার প্রতিক্রিয়া সহ সম্পূর্ণ কাট-এন-পেস্ট প্রস্তুত কোড টুকরা সরবরাহ করুন! আমি জানি যে এর কয়েকটি টুকরো রয়েছে - কাস্টমভালিডেটর (সম্ভবত), কোড-পেছন, কিছু জাভাস্ক্রিপ্ট এবং সম্ভবত ইসভালিডের জন্য একটি চেক এবং আমার জন্য হতাশার অংশটি হ'ল যে প্রতিটি উদাহরণ আমি দেখেছি, এইগুলির মধ্যে একটি টুকরো মিস!

উত্তর:


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: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...
}

আমি সম্ভবত কিছু ভুল করছি। আমি আমার শেষ দিকে তদন্ত চালিয়ে যাব, তবে কন্ট্রোলটোভালিডেট = "<id-of-checkbox-control>" ব্যতিক্রম ছোঁড়ে "কন্ট্রোলটিওভিডালিট সম্পত্তি দ্বারা রেফারেন্স করা কন্ট্রোল <id-of-checkbox-control> বৈধ করা যায় না।" যা জাভাস্ক্রিপ্ট ইত্যাদি ভেঙে দেয়
বব কফম্যান

2
আহ, ঠিক আছে। কেবল এটি সরিয়ে দিন - চেকবক্স এটি বেঁধে দেওয়ার জন্য সঠিক ইন্টারফেস প্রয়োগ করে না। বৈধকরণকারীটি সেই সম্পত্তি সেট ব্যতীত সূক্ষ্মভাবে চলবে। আমি আমার উদাহরণটি সেই অনুযায়ী আপডেট করব।
স্কট আইভী 4'09

2
জাভাস্ক্রিপ্ট ফাংশন নামের কাস্টমভালিডেটর প্যারামিটারটি 'ক্লায়েন্টভালিডেশন ফাংশন' হওয়া উচিত, 'অনক্লিয়েন্টভালিডেট' নয়। দেখুন: এমএসডিএন.মাইক্রোসফটকম /en-us/library/9eee01cx(v=VS.100).aspx
ক্রিস

1
আপনি কোন উপাদানটি প্রভাবিত করার চেষ্টা করছেন jQuery("#<%= MyCheckBox.ClientID %>")তার মধ্যে jQuery(".AcceptedAgreement input:checkbox")আরও স্পষ্ট হওয়ার পরিবর্তে আমি ব্যবহার করার পরামর্শ দেব ।
জেসি ওয়েব

3
আমি প্রাথমিকভাবে লক্ষ্য করিনি যে কন্ট্রোলটোভালিডেট বৈশিষ্ট্য নেই। এই বৈশিষ্ট্যটি অন্তর্ভুক্ত করা একটি ব্যতিক্রম ঘটায়, তাই অন্যদের জন্য সতর্কতার একটি শব্দ যারা এটিও মিস করতে পারে।
মাইক্রোসফ্ট

19

সি # অ্যান্ড্রু এর উত্তর সংস্করণ:

<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;
}

সি # সংস্করণ জন্য ধন্যবাদ। কোডটিও হ্রাস করার ভাল ব্যবহার।
অ্যান্ড্রুউইন

13

আপনি যদি একটি সত্য যাচাইকারী চান যা jquery এর উপর নির্ভর করে না এবং সার্ভারের পাশের বৈধতাও পরিচালনা করে (এবং আপনার উচিত should সার্ভারের পার্শ্বের বৈধতা সবচেয়ে গুরুত্বপূর্ণ অংশ) তবে এখানে একটি নিয়ন্ত্রণ

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 টি ক্রিয়াকলাপের চেয়ে একটি ফর্মের মধ্যে একাধিক চেকবক্সের উপর কাজ করবে answer Huzzah!
হালিফ্যাক্স

আপনাকে অনেক ধন্যবাদ. একাধিক গতিশীল রেন্ডারড কন্ট্রোল দিয়ে আমার এটি করার একটি উপায় প্রয়োজন। অসাধারণ.
schmosef

স্কট থেকে নির্বাচিত সমাধানটি সঠিক / বৈধ হলেও আমি বিশ্বাস করি এটিই আরও সম্পূর্ণ সমাধান। এই কাস্টম নিয়ন্ত্রণ ফ্রেমওয়ার্ক এ বেক করা উচিত ছিল। ধন্যবাদ সিরিসএবিএস!
গাবে

5

স্কটের উত্তর চেকবাক্সগুলির ক্লাসগুলির জন্য কাজ করবে। আপনি যদি স্বতন্ত্র চেকবক্স করতে চান তবে আপনাকে কিছুটা স্নিগ্ধ হতে হবে। যদি আপনি কেবল একটি বাক্স করছেন তবে আইডি সহ এটি করা ভাল। এই উদাহরণটি নির্দিষ্ট চেক বাক্স দ্বারা এটি করে এবং jQuery প্রয়োজন হয় না। আপনি কীভাবে আপনার জাভাস্ক্রিপ্টগুলিতে সেইসব সমস্যাযুক্ত নিয়ন্ত্রণ আইডি পেতে পারেন তার একটি দুর্দান্ত ছোট উদাহরণ।

.্যাসেক্স:

<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>       

এটি পোস্টব্যাক না হওয়ায় অন্যতম সেরা সমাধান।
নিউ এভারেস্ট

এটির সাথে সমস্যাটি হ'ল বৈধকরণকারী বার্তাটি যদি আপনি জমা দেন তবে অদৃশ্য হয়ে যায় না, তারপরে চেষ্টা করে বাক্সটি চেক করুন।
এমসি 9000

-1

নন জাভাস্ক্রিপ্ট উপায়। । এসপেক্স পৃষ্ঠা:

 <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 

ভিবি কোডের জন্য দুঃখিত। । । যদি এটি আপনার সন্তুষ্টি হয় তবে আপনি এটি সি # তে রূপান্তর করতে পারেন। আমি এই মুহূর্তে যে সংস্থার জন্য কাজ করছি তার জন্য ভিবি প্রয়োজন :(


3
এটি কাজ করবে না, যেহেতু আপনি চেকবক্সে বৈধতা সংযুক্ত করতে পারবেন না! DOOOH!
0xDEAD BEEF
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.