0

私はこれに少しの間頭を悩ませていましたが、進歩がありませんでした。誰かが光を当てることができれば絶対に大好きです...私はASP.Net Formsサイトを持っています.jQueryダイアログをロードしてユーザーにIDを入力させ、必須フィールドを実行させ、クライアント側で式バリデーターを実行させ(正常に動作しています)、SQLテーブルサーバー側に対してそれを検証しようとしています。問題は、サーバー側の CustomValidator を起動できないことです。実際の検証スクリプトから 'set args.IsValid = false' に変更し、送信の先頭に 'Page.Validate()' を追加しました。ボタン関数、カスタム検証サブにブレークポイントを追加し、すべての外観から検証アクションは実行されず、エントリが有効であるかのように送信関数が続行されます。

// 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

事前に助けてくれてありがとう、それは大歓迎です!

更新: @ShaiCohenのコメントによると、jQueryダイアログにあるDIVに間違いなく関連しているようです。ログインボタンとダイアログに使用されるdivの両方からhidden属性を削除したため、ダイアログdivもページに表示されました、ダイアログの外側で ASP 送信ボタンを使用すると、検証は正常に機能しますが、ダイアログ内で ASP ボタンを使用するか、ダイアログ ボタンを使用すると、検証が機能しません。

4

1 に答える 1

0

私は jQuery モーダルの使用を断念し、代わりに CSS を使用してモーダルを構築することにしましたが、そこで動作する検証に問題はありませんでした。

于 2013-03-14T12:24:13.750 に答える