【问题标题】:How to trigger asp.net customvalidator with javascript如何使用 javascript 触发 asp.net customvalidator
【发布时间】:2019-11-07 11:15:27
【问题描述】:

我正在尝试使用 java 脚本触发 asp.net 自定义验证器,但它没有触发。下面显示的代码会触发其他验证器,例如必填字段验证器。谁能告诉我下面的代码有什么问题或者为什么它没有触发

<script type="text/javascript">
    function CheckValidation(btn) {
        var valid = false;
        if (Page_ClientValidate('RtRegValGrp')) {
            alert('valid');
            __doPostBack(btn.name, "");
         } else {
             alert('not valid');
         }
     }
</script>

<asp:TextBox ID="txtCompanyName" runat="server" MaxLength="100"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
    ControlToValidate="txtCompanyName" 
    ValidationGroup="RtRegValGrp" 
    ErrorMessage="Company name is required !"
    ForeColor="red" Display="Dynamic" />
<asp:CustomValidator ID="txtCompanyNameValidator" runat="server"
    ControlToValidate="txtCompanyName"
    ValidationGroup="RtRegValGrp"
    OnServerValidate="BlackListValidator" 
    ForeColor="Red" Display="Dynamic">
</asp:CustomValidator>

<asp:Button ID="Button1" runat="server" CssClass="goldBtn" Text="SUBMIT" 
    OnClientClick="CheckValidation(this); return false;" 
    OnClick="Button1_Click" />

//server side code
protected void BlackListValidator(object source, ServerValidateEventArgs args)
{
    args.IsValid = false;
}

【问题讨论】:

    标签: javascript asp.net .net


    【解决方案1】:

    您的CustomValidator 当前仅使用服务器端验证代码设置...客户端 ASP.Net 代码无法在没有回发的情况下知道验证结果。

    要使其成为客户端,您需要在 javascript 中复制验证代码(出于安全原因,您必须保留服务器端代码)并且然后设置ClientValidationFunction 属性...

    <asp:CustomValidator ValidationGroup="RtRegValGrp" ID="txtCompanyNameValidator"
      ForeColor="Red" OnServerValidate="BlackListValidator" Display="Dynamic"
      ControlToValidate="txtCompanyName" runat="server"
      ClientValidationFunction="BlackListValidatorFnc" />
    
    <script>
      function BlackListValidatorFnc(src, args) {
        args.IsValid = false;
      }
    </script>
    

    【讨论】:

    • 但是如果 (Page_ClientValidate('RtRegValGrp')) 没有回发,下面的代码会触发 requiredfieldvalidator 等验证器。
    • 是的,因为像 RequiredFieldValidator 这样的东西在 ASP.Net 中内置了客户端代码。自定义验证器就是这样......它是自定义的。就像您必须编写服务器端代码来进行特定检查一样,您必须将其复制到客户端。对不起,但我不知道如何向你描述它
    • 好的,谢谢您的信息。有没有其他方法可以使用 java 脚本(带有回发)触发服务器端验证。
    • 您可以使用 AJAX 做一些事情,但除非它只能在服务器上发生(例如与 DB 相关),否则在 javascript 中复制它会更有意义。
    • 我不得不问你为什么要做javascript?您的代码似乎不必要地复杂和有缺陷。我看不出为什么不能将ValidationGroup 添加到按钮,然后使用&lt;asp:ValidationSummary&gt; 元素来显示消息。然后,它将按应有的方式进行所有客户端验证,当客户端通过时,会触发回发并完成服务器端验证?
    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2023-03-05
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多