【问题标题】:using custom validators in ASP.net在 ASP.net 中使用自定义验证器
【发布时间】:2012-01-11 00:43:44
【问题描述】:

我正在使用 ASP.net 自定义验证器来验证邮件是否存在于数据库中,所以我有一个服务器端 bool 函数

public void isUnique(object source, ServerValidateEventArgs args)
{
    args.IsValid = Formatters.FormatUser.AlternateMailUnique(_txtAlternateEmail.Text);    
}

以及一个验证文本框 _txtAlternateEmail 的自定义验证器

<asp:TextBox ID="_txtAlternateEmail" runat="server" onkeypress="typetext();" onmouseout="textclear();"></asp:TextBox>
                        <asp:CustomValidator runat="server" id="cusCustom" controltovalidate="_txtAlternateEmail"  OnServerValidate="isUnique"  errormessage="Mail already exists" ValidationGroup="savechanges"/>

同时验证器不像 .net 验证器那样起作用,我的意思是,如果函数 isUnique 返回 false,则页面返回到服务器并且没有任何验证。

【问题讨论】:

    标签: asp.net customvalidator


    【解决方案1】:

    您需要使用Page.IsValid属性-该属性表示页面验证是否成功。

    除了isUnique() 处理程序之外,您还需要在按钮的单击处理程序或您要执行操作的其他处理程序中验证Page.IsValid 的值。

    例如,

    protected void Button1_Click(object sender, EventArgs e)
      {
        if (Page.IsValid)
        {
          //your actions
         }
      }
    

    PS:如果清除了_txtAlternateEmail的内容,则删除JavaScript属性onmouseout="textclear()"

    【讨论】:

      【解决方案2】:

      看起来您没有将服务器验证放在您的标记中。 尝试添加:

      OnServerValidate="isUnique"
      

      【讨论】:

      • @Islam 您是否设置了断点以确保它被击中并且 AlternateMailUnique 实际上返回您期望的内容?设置 args.IsValid 应该是您处理它所需要做的所有事情。
      • 是的,我做了,并且 args.Isvalid 处理我想要的,但是页面做了一个回发,我不需要它来完成,我希望它像 ant .net 验证器显示错误消息并防止任何回发
      • 哦,我明白你在说什么。好的,在自定义验证器 OnServerValidate 调用中,它必须回发。代码位于服务器上。我不确定“ant”是做什么的,我不熟悉它。
      • 谢谢,看来我要做手工验证器来解决这个问题。我将使用文本框的文本更改并使用更新面板和触发器来检查我的服务器端代码.
      猜你喜欢
      • 1970-01-01
      • 2012-11-18
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多