【问题标题】:How to make a Textbox required IF a Checkbox is checked如果选中复选框,如何使文本框成为必需
【发布时间】:2011-01-09 02:57:57
【问题描述】:

如果选中了复选框,如何使文本框成为必需?

我想我可以编写一个自定义验证器,但我希望避免在可能的情况下回复完整的帖子来检查验证...我认为 AJAX 为这种情况内置了一些东西,但我一直无法做到找到它。我认为直接使用 JavaScript 也是一种解决方案,但如果这是最好的方法,我可以先行一步。

【问题讨论】:

    标签: .net asp.net validation


    【解决方案1】:

    您可以制作一个自定义验证器,然后将这两个控件包装在一个 UpdatePanel 中。这将把它变成你的 AJAX 调用。有点浪费,但它省去了您自己编写 JavaScript 的麻烦。

    另外,如果你和我一样讨厌写 JS,你应该试试 jQuery。

    【讨论】:

      【解决方案2】:

      您需要在您当前使用的任何验证例程中检查它,包括客户端和服务器端。

      【讨论】:

        【解决方案3】:

        已经有一个 customvalidator 验证器控件,它可以触发客户端 javascript 方法来评估值,或触发服务器端方法来比较值。

        这里有一个例子:http://msdn.microsoft.com/en-us/library/a0z2h4sw%28VS.80%29.aspx 此处解释的客户端属性:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.clientvalidationfunction.aspx 服务器事件在这里:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.servervalidate.aspx

        您可以输入代码以交叉引用复选框值。

        HTH。

        【讨论】:

          【解决方案4】:

          处理这个问题的 JavaScript 并不难。

          鉴于以下 ASP 控件:

          <asp:TextBox ID="txtSubject" runat="server" />
          <asp:CheckBox ID="chkSubjectRequired" runat="server" OnClick="updateValidator();" />
          <asp:RequiredFieldValidator ID="rfvSubject" ControlToValidate="txtSubject" ErrorMessage="You must enter a subject." runat="server" />
          

          添加以下 JavaScript 函数:

          <script language="javascript" type="text/javascript">
              function updateValidator() {
                  var enableValidator = !event.srcElement.status;
                  var rfvSubject = document.getElementById('rfvSubject');
                  ValidatorEnable(rfvSubject, enableValidator);
              }
          </script>
          

          仅此而已。您还需要将以下代码添加到您的页面加载事件中,这样如果用户禁用了 JavaScript,您的必填字段验证器仍然可以正确打开或关闭:

          rfvSubject.Enabled = chkSubjectRequired.Checked
          

          【讨论】:

          • 太棒了,非常感谢...尽管查看您的 asp 代码,即使未选中复选框,是否也需要 txtSubject ?您的意思是禁用验证器...然后让 javascript 启用它?
          • 所有提供的代码都是未经测试的等等等等。是的,看来我是倒退了。我修改了答案。
          • event.srcElement 上的status 属性不应该改为checked 吗?
          • @Rory - 状态和检查工作。坦率地说,我的整个答案太以 IE 为中心,对任何人都没有多大用处,现在每个人都在使用 jQuery,而我在 2 年前还没有发现...
          【解决方案5】:

          要在 ASP.Net 中解决这一切,请使复选框回发:

          <asp:CheckBox 
               ID="Existing" 
               runat="server" 
               Text="Conditional ValidatorVal" 
               AutoPostBack="True" 
               OnCheckedChanged="Existing_CheckedChanged"
           />
          

          然后在代码隐藏中启用或禁用验证器:

          protected void Existing_CheckedChanged(object sender, EventArgs e)
          {
               RequiredFieldValidator1.Enabled =! Existing.Checked;
          }
          

          【讨论】:

            【解决方案6】:

            您必须使用 CustomValidator 并在复选框和文本框中使用 ClientIDMode="Static"

            <asp:TextBox ID="txtSubject" ClientIDMode="Static" runat="server" />
            <asp:CheckBox ID="chkSubjectRequired" ClientIDMode="Static" runat="server" />
            <asp:CustomValidator ID="valid1" runat="server" 
                       ClientValidationFunction="validateCheckboxCheck" 
                       ErrorMessage="You must write anything.">
            </asp:CustomValidator>
            

            并在下面写下函数的脚本标签(需要jQuery)

            <script type="text/javascript">
            function validateCheckboxCheck(source, args) {
                        if ($("#chkSubjectRequired").is(":checked")) {
                            if ($("#txtSubject").val()==="") {
                                // return false for error message
                                args.IsValid = false;
                            } else {
                                // return true
                                args.IsValid = true;
                            }
                        } else {
                            // return true
                            args.IsValid = true;
                        }
                    }
            </script>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-06-10
              • 1970-01-01
              • 2019-03-14
              • 2021-04-26
              相关资源
              最近更新 更多