【发布时间】:2010-10-12 15:00:18
【问题描述】:
我在 asp.net 网络表单上有三个文本框,我如何/可以使用必填字段验证器来确保其中至少一个包含文本?
【问题讨论】:
我在 asp.net 网络表单上有三个文本框,我如何/可以使用必填字段验证器来确保其中至少一个包含文本?
【问题讨论】:
我会使用这样的 CustomFieldValidator:
<asp:CustomValidator runat="server"
ID="MyCustomValidator"
ValidationGroup="YOUR_VALIDATION_GROUP_NAME"
OnServerValidate="MyCustomValidator_ServerValidate"
ErrorMessage="At least one textbox needs to be filled in." />
然后在你的代码隐藏中你有:
protected void MyCustomValidator_ServerValidate(object source, ServerValidateEventArgs args)
{
if (/* one of three textboxes has text*/)
args.IsValid = true;
else
args.IsValid = false;
}
您还可以在此验证中添加一个客户端组件,并通过使用 AJAX 工具包的 ValidatorCalloutExtender 控件对其进行扩展来使其更有吸引力。
【讨论】:
我认为RequiredFieldValidator 不符合您的要求。我会使用分配给您的任何字段的CustomValidator,并在触发时手动检查它们。
<script>
function doCustomValidate(source, args) {
args.IsValid = false;
if (document.getElementById('<% =TextBox1.ClientID %>').value.length > 0) {
args.IsValid = true;
}
if (document.getElementById('<% =TextBox2.ClientID %>').value.length > 0) {
args.IsValid = true;
}
if (document.getElementById('<% =TextBox3.ClientID %>').value.length > 0) {
args.IsValid = true;
}
}
</script>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="have to fill at least 1 field"
ControlToValidate="TextBox1"
ClientValidationFunction="doCustomValidate"
ValidateEmptyText="true" ></asp:CustomValidator><br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br />
不要忘记将ValidateEmptyText="true" 设置为默认跳过空字段。确保您也创建了类似的服务器端验证方法。
【讨论】: