【问题标题】:Custom validation client side ignores invalid state自定义验证客户端忽略无效状态
【发布时间】:2014-01-31 13:02:23
【问题描述】:

我想制作自定义验证器来检查给定名称的对象是否已存在于数据库中。 WS 工作正常,arg.IsValid 设置为 false 但 当我取消注释 Page_ClientValidate(); 时,函数进入无限循环(我猜它运行所有验证器函数,这是为什么)但它返回 false 但是当页面提交时,验证器开始返回 true O.o'。

如果txtname 无效,如何中止回发? 我怀疑是因为当我按下按钮时,smsCodeValidator 实际运行但由于回发而中止

<asp:CustomValidator 
  ID="cvtxtSMSCode" 
  runat="server" Display="Dynamic" 
  ControlToValidate="txtName" 
  EnableClientScript="true"
  ClientValidationFunction="$U.nameValidator" 
  ForeColor="Red" 
  ErrorMessage="already exists" 
  ValidationGroup="vgName">
</asp:CustomValidator>

nameValidator: function (source, arg) {
    $.ajax({
        type: "POST",
        url: "/../../../../WS/Utility.asmx/NameValidator",
        data: JSON.stringify({ "toTest": arg.Value }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (result) {
            if (result.d == true) {
                arg.IsValid = true;
                $(source).hide();
                return;
            }
            else {
                $(source).show();
                arg.IsValid = false;
                alert(arg.IsValid);
                //Page_ClientValidate();
                return;
            }
        }
    });
},

<asp:Button ID="btnSave" ValidationGroup="vgName" 
runat="server" 
OnClick="btnSaveChanges_Click"
Text="Save" />

【问题讨论】:

    标签: c# asp.net validation webforms


    【解决方案1】:

    我相信您将进入无限循环,因为您在知道页面处于无效状态时尝试验证该页面。

    Page_ClientValidate() 将依次调用每个验证器以确保它们已被触发,当它到达您的自定义验证器时,您将再次启动它,这将导致您看到的递归。 更好的选择是检查 Page_IsValid 的值,而不是由其他验证器保持最新。

    最后,别忘了如果文本框为空,验证器将不会被调用,你还需要一个必填字段验证器。

    更多详情请访问MSDN article: ASP.Net Validation In Depth

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2012-03-18
      相关资源
      最近更新 更多