Как проверить, что список не пустой (на стороне клиента) - PullRequest
3 голосов
/ 24 сентября 2008

Я работаю с ASP.NET 3.5. У меня есть список, в который пользователи должны добавлять элементы (я написал код для этого). Мое требование заключается в том, что по крайней мере один элемент должен быть добавлен в список, или они не могут отправить форму. У меня есть несколько других валидаторов на странице, и все они пишут в элемент управления ValidationSummary. Мне бы хотелось, чтобы эта проверка списка также записывалась в элемент управления Сводка проверки. Любая помощь очень ценится. Спасибо.

Ответы [ 7 ]

5 голосов
/ 05 декабря 2008

Это не сработало для меня:

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; 
}
5 голосов
/ 24 сентября 2008

Вставьте пользовательский валидатор, добавьте в него желаемое сообщение об ошибке, дважды щелкните по пользовательскому валидатору, чтобы перейти к коду позади обработчика событий, и затем вы реализуете серверную часть следующим образом:

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

Также вы можете реализовать клиентский javascript.

Я просто выкинул это на страницу и быстро протестировал, так что вам, возможно, придется немного его подправить: (Кнопка1 только добавляет элемент в список)

<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 такой же.

3 голосов
/ 10 июня 2011

нужно обязательно добавить эти свойства в CustomValidator:

Display="Dynamic" ValidateEmptyText="True"
1 голос
/ 03 мая 2010

На самом деле это правильный способ заставить эту работу работать (насколько это касается 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)

}
1 голос
/ 21 ноября 2008
<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>    
0 голосов
/ 17 ноября 2016

эта работа для меня

<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>
0 голосов
/ 24 сентября 2008

Вы хотите зарегистрировать свой элемент управления на странице, отправив в ClientID. Затем вы можете использовать Microsoft AJAX, чтобы захватить ваш элемент управления и проверить значения.

...