如何在ASP.NET表单上创buildcheckbox?

我在这方面做了一些研究,并且find了几个部分的答案,但是没有任何东西给我那种温暖的模糊的“这是做这件事的正确方法”。 为了回答这个问题最频繁的投诉:“checkbox可以有两个合法的状态 – 选中和未选中”,这是一个“我接受条款和条件…”checkbox,必须检查,以完成注册,因此从业务逻辑的angular度来看,需要检查该框。

请提供完整的剪切粘贴现成的代码片段与您的回应! 我知道有几件这 – CustomValidator(大概),代码隐藏,一些JavaScript和可能的IsValid检查,而令我沮丧的是我在每个例子中,我已经看到,其中一个关键件丢失了!

用于客户端validation的javascript函数(使用jQuery)…

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

代码隐藏的服务器端validation…

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

checkbox和validation器的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> 

最后,在你的回发 – 无论是从一个button或其他…

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

C#版的安德鲁的答案是:

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

如果你想要一个真正的validation器,不依赖于jquery,并且处理服务器端的validation(你应该。服务器端validation是最重要的部分),那么这里是一个控件

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

斯科特的答案将适用于类checkbox。 如果你想单独的checkbox,你必须是一个小鬼鬼祟祟的。 如果你只是在做一个盒子,最好用ID来做。 这个例子通过特定的checkbox来实现,不需要jQuery。 这也是一个很好的例子,你可以如何将这些麻烦的控制ID到你的Javascript。

.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 

我通常在客户端执行validation:

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

非JavaScript的方式。 。 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 🙁