如何验证列表框不为空(客户端)

时间:2020-03-06 14:40:08  来源:igfitidea点击:

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

解决方案

我们将需要通过发送ClientID在页面上注册控件。然后,我们可以使用Microsoft AJAX来获取控件并检查值。

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

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>

如果在页面上添加验证摘要,则只要ValidationGroup相同,如果ListBox或者其他可收集的控件中没有要使用的项,则该摘要中将显示错误文本。 。

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

这对我不起作用:

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

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

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

`

函数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)

}

`