【发布时间】:2011-01-11 10:20:00
【问题描述】:
我有一个ASP.NET 表单,用于请求货币兑换。那里有两个文本字段:amount-source 和amount-target。
其中一个必须填写,而且只有一个。
如果适用,如何使用验证器来实现这一点?
【问题讨论】:
标签: c# asp.net .net validation asp.net-2.0
我有一个ASP.NET 表单,用于请求货币兑换。那里有两个文本字段:amount-source 和amount-target。
其中一个必须填写,而且只有一个。
如果适用,如何使用验证器来实现这一点?
【问题讨论】:
标签: c# asp.net .net validation asp.net-2.0
您可以为此使用自定义验证器:
<asp:Textbox id="textbox1" runat="server" />
<asp:CustomValidator id="valCustom" runat="server"
ControlToValidate="textbox1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidate"
ErrorMessage="*You can only enter 1" display="dynamic">*
</asp:CustomValidator>
<asp:Textbox id="textbox2" runat="server" />
<asp:CustomValidator id="valCustom2" runat="server"
ControlToValidate="textbox2"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidate"
ErrorMessage="*You can only enter 1" display="dynamic">*
</asp:CustomValidator>
<script language="Javascript">
function ClientValidate(source, arguments)
{
var tb1 = document.getElementById("<%=textbox1.ClientID %>").value;
var tb2 = document.getElementById("<%=textbox2.ClientID %>").value;
if (tb1 && tb2 || (!tb1 && !tb2)){
arguments.IsValid = false;
} else {
arguments.IsValid = true;
}
}
</script>
服务器端:
protected void ServerValidate(object sender, ServerValidateEventArgs args)
{
if(string.isNullOrEmpty(textbox1.Text) && string.isNullOrEmpty(textbox2.Text))
args.IsValid = false;
else if(!string.isNullOrEmpty(textbox1.Text) && !string.isNullOrEmpty(textbox2.Text))
args.IsValid = false;
else
args.IsValid = true;
}
如果您使用的是 jQuery,请发表评论...这一切都会更简洁。
【讨论】:
ControlToValidate 属性的单个 CustomValidator 实例。
ValidateEmptyText 属性设置为 true。发生这种情况是因为默认情况下,如果验证器正在查看一个空字段,它将完全跳过验证。
我会实现一个自定义验证器并用它装饰两个文本框。如果两者都被填满,那么两者都处于错误状态。
【讨论】: