使用验证器确保用户填写两个必填字段中的任何一个

时间:2010-01-31 14:04:14

标签: c# asp.net .net validation asp.net-2.0

我有一个ASP.NET表单用于兑换货币。那里有两个文本字段:amount-source和amount-target。

其中一个必须填写,只有一个。

如果适用,如何使用Validators实现此目的?

2 个答案:

答案 0 :(得分:13)

您可以使用自定义验证器:

<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,请评论......这可以更加清晰。

答案 1 :(得分:1)

我会实现一个自定义的Validator并用它来装饰两个TextBoxes。如果两者都被填充,则两者都处于错误状态。