【问题标题】:How do I validate that a list box is not empty (client side)如何验证列表框不为空(客户端)
【发布时间】:2010-09-12 18:23:41
【问题描述】:

我正在使用 ASP.NET 3.5。 我有一个用户必须添加项目的列表框(我已经为此编写了代码)。我的要求是必须将至少一项添加到列表框中,否则他们无法提交表单。我在页面上还有其他几个验证器,它们都写入 ValidationSummary 控件。我希望这个列表框验证也可以写入验证摘要控件。任何帮助是极大的赞赏。谢谢。

【问题讨论】:

    标签: asp.net validation listbox customvalidator


    【解决方案1】:

    放入自定义验证器,向其中添加所需的错误消息,双击自定义验证器以获取事件处理程序背后的代码,然后您将像这样实现服务器端:

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) 
    {
            args.IsValid = ListBox1.Items.Count > 0; 
    }
    

    您也可以实现客户端javascript。

    我只是把它放在一个页面上并快速测试它,所以你可能需要稍微调整一下:(button1 只向列表框添加一个项目)

    <script language="JavaScript">
    <!--
      function ListBoxValid(sender, args)
      {
          args.IsValid = sender.options.length > 0;
      }
    // -->
    </script>    
    <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="NOVALID" />
    <asp:Button ID="Button2" runat="server" Text="ButtonsUBMIT"  />
    
    <asp:CustomValidator ID="CustomValidator1" runat="server" 
    ErrorMessage="CustomValidator" 
    onservervalidate="CustomValidator1_ServerValidate" ClientValidationFunction="ListBoxValid"></asp:CustomValidator>
    

    如果向页面添加验证摘要,如果 ListBox 或其他可收集控件中没有项目,则错误文本应显示在该摘要中,无论您想使用什么,只要 ValidationGroup是一样的。

    【讨论】:

      【解决方案2】:

      这对我不起作用:

      function ListBoxValid(sender, args) 
      {
              args.IsValid = sender.options.length > 0; 
      }
      

      但是这样做了:

      function ListBoxValid(sender, args)
      {
              var ctlDropDown = document.getElementById(sender.controltovalidate);
              args.IsValid = ctlDropDown.options.length > 0; 
      }
      

      【讨论】:

        【解决方案3】:

        必须确保将这些属性添加到 CustomValidator:

        Display="Dynamic" ValidateEmptyText="True"
        

        【讨论】:

          【解决方案4】:
          <asp:CustomValidator 
               runat="server" 
               ControlToValidate="listbox1"
               ErrorMessage="Add some items yo!" 
               ClientValidationFunction="checkListBox"
          />
          
          <script type="Text/JavaScript">
            function checkListBox(sender, args)
            {
                args.IsValid = sender.options.length > 0;
            }
          </script>    
          

          【讨论】:

            【解决方案5】:

            实际上,这是完成这项工作的正确方法(就 JavaScript 而言)。

            ListBox.options.length 将始终是您的选项总数,而不是您选择的数量。我发现可行的唯一方法是使用 for 循环遍历列表。

            function ListBoxValid(sender, args)
            {
            
                var listBox = document.getElementById(sender.controltovalidate);
            
                var listBoxCnt = 0;
            
                for (var x =0; x<listBox.options.length; x++)
                {
                    if (listBox.options[x].selected) listBoxCnt++;
                }
            
                args.IsValid = (listBoxCnt>0)
            
            }
            

            【讨论】:

              【解决方案6】:

              这对我有用

              <script language="JavaScript">
                function CheckListBox(sender, args)
                {
                    args.IsValid = document.getElementById("<%=ListBox1.ClientID%>").options.length > 0;
                }
              </script>    
              <asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
              <asp:CustomValidator ID="CustomValidator1" runat="server" 
              ErrorMessage="*Required" ClientValidationFunction="CheckListBox"></asp:CustomValidator>
              

              【讨论】:

                【解决方案7】:

                您将希望通过发送 ClientID 向页面注册您的控件。然后,您可以使用 Microsoft AJAX 来获取控制权并检查值。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-11-17
                  • 1970-01-01
                  • 2012-09-19
                  相关资源
                  最近更新 更多