【问题标题】:ASP Custom Server-Side Validation not firingASP 自定义服务器端验证未触发
【发布时间】:2013-02-27 10:02:58
【问题描述】:

我一直在努力解决这个问题,但没有任何进展,所以如果有人能提供一些启发,我会非常喜欢它...我有一个 ASP.Net Forms 网站,我加载了一个jQuery Dialog 让用户输入一个 ID,做一个必填字段,和表达式验证器客户端(工作正常),然后我试图在 SQL 表服务器端验证它。问题是我无法启动服务器端 CustomValidator,我已将其从实际验证脚本更改为仅“设置 args.IsValid = false”,将“Page.Validate()”添加到提交的顶部按钮功能,向自定义 validate Sub 添加了一个断点,并且从所有外观来看,验证操作都没有执行,并且提交功能继续,就好像条目是有效的一样。

// Show the Login Dialog
        <script>
         function showLogin() {
             $("#login-dialog").dialog({
                 height: 380
                 , width: 500
                 , modal: true
                 , buttons: {
                     'Login': {
                         text: "Login"
                         //Login Dialog Login Submit button function
                         , click: function () {
                             $("#<%=LoginSubmit.ClientID()%>")[0].click();
                             return false;
                         }
                     }
                     , 'Register': {
                         text: "Register"
                         //Login Dialog Register Button
                         , click: function () {
                             $("#<%=RegisterButton.ClientID()%>")[0].click();
                             return false;
                         }
                     }
                 }
             });
         };

<%--Login dialog Div--%>

        <div id="login-dialog" title="Please Login or Register" hidden="hidden">

        <p>If you have already setup an Operator ID you can enter it below, otherwise please register for one.</p>

            <asp:RequiredFieldValidator runat="server" ControlToValidate="LoginOperatorID" ErrorMessage="Operator ID is required." CssClass="field-validation-error" />

            <asp:RegularExpressionValidator runat="server" ControlToValidate="LoginOperatorID" ErrorMessage="Operator ID must be 4-9 digits" CssClass="field-validation-error" ValidationExpression="[0-9]{4,9}" />

        <table id="LoginTable">
        <tr>
        <td>Operator ID:</td>
        <td><input type="password" runat="server" id="LoginOperatorID" maxlength="9" /></td>

            <asp:CustomValidator ID="LoginSubmitValidator" runat="server" EnableClientScript="true" Enabled="true" 
                ErrorMessage="Operator ID does not exist." 
                ControlToValidate="LoginOperatorID"
                OnServerValidate="CheckLoginID" CssClass="field-validation-error" />
            </tr>
        </table><br />
        <input type="button" runat="server" id="LoginSubmit" onserverclick="SubmitLogin" hidden="hidden" causesvalidation="true" />
         <input type="button" runat="server" id="RegisterButton" hidden="hidden" onserverclick="RegisterDialog" causesvalidation="false" />

'Validate Operator Login Sub
    Protected Sub CheckLoginID(source As Object, args As ServerValidateEventArgs)
        args.IsValid = False
    End Sub

    'Submit Operator Login Sub
    Sub SubmitLogin()
            Page.Validate()
       .....
    End Sub

提前感谢您的帮助,非常感谢!

更新: 这似乎与 jQuery 对话框中的 DIV 有关,根据@ShaiCohen 的评论,我从登录按钮和用于对话框的 div 中删除了 hidden 属性,导致对话框 div 也显示在页面中,当我在对话框外使用 ASP 提交按钮验证工作正常,当我在对话框内使用 ASP 按钮或使用对话框按钮时,验证不起作用。

【问题讨论】:

  • 您的LoginSubmit 按钮似乎设置为隐藏。这可能是你的问题。
  • 很好奇,逗号的位置真的很奇怪是怎么回事?
  • @ShaiCohen 这是我能找到的从 jQ 对话框中执行服务器端脚本 onclick 的唯一解决方法,因为 ASP 按钮在其中不起作用,不知道隐藏按钮会影响验证,我会四处寻找解决方案。
  • @Sparky 我想我可以在开始这个项目之前将其归因于大量 T-SQL 工作,因此习惯将逗号放在行的开头,所以如果我注释掉或删除一行我不用弄乱上面/下面的逗号,intellisense 会在 VS 的逗号后面添加额外的空格。
  • 隐藏按钮是问题所在吗?而且,顺便说一句,我用逗号做同样的事情...... :)

标签: asp.net validation


【解决方案1】:

我最终放弃了使用 jQuery 模态,并决定改用 CSS 构建一个模态,并且在那里工作的验证没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多