【发布时间】:2010-09-12 18:23:41
【问题描述】:
我正在使用 ASP.NET 3.5。 我有一个用户必须添加项目的列表框(我已经为此编写了代码)。我的要求是必须将至少一项添加到列表框中,否则他们无法提交表单。我在页面上还有其他几个验证器,它们都写入 ValidationSummary 控件。我希望这个列表框验证也可以写入验证摘要控件。任何帮助是极大的赞赏。谢谢。
【问题讨论】:
标签: asp.net validation listbox customvalidator
我正在使用 ASP.NET 3.5。 我有一个用户必须添加项目的列表框(我已经为此编写了代码)。我的要求是必须将至少一项添加到列表框中,否则他们无法提交表单。我在页面上还有其他几个验证器,它们都写入 ValidationSummary 控件。我希望这个列表框验证也可以写入验证摘要控件。任何帮助是极大的赞赏。谢谢。
【问题讨论】:
标签: asp.net validation listbox customvalidator
放入自定义验证器,向其中添加所需的错误消息,双击自定义验证器以获取事件处理程序背后的代码,然后您将像这样实现服务器端:
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是一样的。
【讨论】:
这对我不起作用:
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;
}
【讨论】:
必须确保将这些属性添加到 CustomValidator:
Display="Dynamic" ValidateEmptyText="True"
【讨论】:
<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>
【讨论】:
实际上,这是完成这项工作的正确方法(就 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)
}
【讨论】:
这对我有用
<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>
【讨论】:
您将希望通过发送 ClientID 向页面注册您的控件。然后,您可以使用 Microsoft AJAX 来获取控制权并检查值。
【讨论】: