Я работаю с ASP.NET 3.5. У меня есть список, в который пользователи должны добавлять элементы (я написал код для этого). Мое требование состоит в том, что по крайней мере один элемент должен быть добавлен в список или они не могут отправить форму. У меня есть несколько других валидаторов на странице, и все они записываются в элемент ValidationSummary. Я бы хотел, чтобы эта проверка списка также записывалась в контрольный элемент проверки. Любая помощь приветствуется. Спасибо.Как проверить, что окно списка не пусто (на стороне клиента)
ответ
Вам необходимо зарегистрировать свой элемент управления на странице, отправив идентификатор ClientID. Затем вы можете использовать Microsoft AJAX, чтобы захватить ваш контроль и проверить значения.
падения в валидаторе, Добавить нужное сообщение об ошибке к нему, дважды щелкните на валидатор, чтобы добраться до кода позади для обработчика событий, а затем вы можете реализовать на сторону сервера, как это:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = ListBox1.Items.Count > 0;
}
Также вы можете реализовать javascript на стороне клиента.
я просто бросил это на странице и протестировали его быстро, так что вам, возможно, придется настроить его немного: (The button1 только добавляет элемент к списку Box)
<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 была одинаковой.
<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 для перехода по списку.
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)
}
должен убедиться, чтобы добавить эти свойства в CustomValidator:
Display="Dynamic" ValidateEmptyText="True"
эта работа для меня
<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>