【问题标题】:Only one of two textboxes is required (custom validator)只需要两个文本框之一(自定义验证器)
【发布时间】:2013-04-17 08:12:27
【问题描述】:

说明:我有两个文本框,用户可以选择填写,但必须至少填写其中一个。

预期结果:显示错误消息 意外结果:错误消息未显示

HTML:

<asp:TextBox ID="TB1" runat="server" /> 
<asp:CustomValidator ID="CV1" ControlToValidate="TB1" runat="server" OnServerValidate="blabla" ErrorMessage="one of two required" />
<asp:TextBox ID="TB2" runat="server" />
<asp:CustomValidator ID="CV2" ControlToValidate="TB2" runat="server" OnServerValidate="blabla" ErrorMessage="they cant both be blank" />

C#:

protected void blabla(object sender, ServerValidateEventArgs e)
{
    if (TB1.Text.Length == 0 && TB2.Text.Length == 0)
        e.IsValid = false; 
    else
        e.IsValid = true; 
}

请你帮忙解释一下为什么这不是工作人员?

【问题讨论】:

  • 你到底想要什么。简要解释一下........??????
  • 什么不起作用? blabla 事件是否正在引发?你有例外吗?是不是没有达到你的预期?
  • 只有一个,还是至少一个?另外,请解释您要完成的工作。
  • 对不起各位,不够清楚,我已经更新了帖子。
  • 意外的结果是什么?

标签: c# asp.net


【解决方案1】:

您只需要一个CustomValidator 即可。它是唯一可以在这种情况下省略ControlToValidate 的验证器。

aspx:

<asp:TextBox ID="TB1" runat="server" /> 
<asp:TextBox ID="TB2" runat="server" />
<asp:CustomValidator ID="CV1"runat="server" 
    OnServerValidate="ServerValidation" 
    ErrorMessage="one of two required" />

代码隐藏:

protected void ServerValidation(object source, ServerValidateEventArgs args)
{
    args.IsValid = TB1.Text.Trim().Length > 0 || TB2.Text.Trim().Length > 0;
}

【讨论】:

  • +1 一如既往的好答案,蒂姆。您也可以进行客户端验证。
【解决方案2】:

试试这个:

protected void blabla(object sender, ServerValidateEventArgs e)
{
    if (string.IsNullOrEmpty(TB1.Text) && string.IsNullOrEmpty(TB2.Text))
        e.IsValid = false;
    else
        e.IsValid = true;
}

使用ValidationGroup 属性也很有用:

<asp:TextBox ID="TB1" runat="server" /> 
<asp:CustomValidator ID="CV1" ControlToValidate="TB1" runat="server" OnServerValidate="blabla" ErrorMessage="one of two required" validationgroup="validationGroup" />
<asp:TextBox ID="TB2" runat="server" />
<asp:CustomValidator ID="CV2" ControlToValidate="TB2" runat="server" OnServerValidate="blabla" ErrorMessage="they cant both be blank" validationgroup="validationGroup" />

<asp:button id="ValidateButton" text="Validate" validationgroup="validationGroup" runat="server"/>

【讨论】:

  • 使用 Tim 仅使用单个 customvalidator 的方法更容易解决,但非常感谢您的回复。
【解决方案3】:

&amp;&amp; 表示and 如果两个长度都为 0 则无效,请尝试

bool b = false;
if (TB1.Text.Length != 0)
b = true;

if (TB2.Text.Length != 0)
b = true;

e.IsValid = b; 

【讨论】:

  • 注意:我更喜欢 Tim 的回答,虽然我不喜欢很长的 or 陈述,所以如果有额外的文本框可以比较,我更喜欢这个
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多