2
Below is my mark up. 

<asp:TextBox ID="txtPatientDateOfBirth" runat="server" 
    CssClass="rightDivInnerControls" ClientIDMode="Static" 
    CausesValidation="True">
</asp:TextBox>
<asp:CompareValidator ID="cvPatientDateOfBirth" runat="server" 
    ErrorMessage="Enter proper date." 
    Type="Date" ControlToValidate="txtPatientDateOfBirth" Font-Bold="True"  
    Operator="DataTypeCheck"
    ValidationGroup="FirstPreview">
</asp:CompareValidator>    

<asp:Button ID="btnSaveChanges" runat="server" 
    Text="Save Changes"  OnClientClick="return showFinalReviewAlert();" 
    CssClass="btnPrimary hideInPrint btnEditFinalReport" 
    ValidationGroup="FirstPreview" 
    onclick="btnSaveChanges_Click"  ClientIDMode="Static"/>

日付を間違った形式に変更すると、すぐにエラー メッセージが表示されます。

ここに画像の説明を入力

しかし、「btnSaveChanges」ボタンをクリックすると、ポストバックが行われます。ポストバックを行っているため、何かが欠けていると思います。

誰でも問題を解決してください。検証が失敗した場合、ポストバックを停止したい。

ありがとう。

4

5 に答える 5

2

実際、これらの ASP.NET Validators の動作 (ここで説明: ASP.NET Web ページでのユーザー入力の検証) は、予想とは少し異なります。リンクされた MSDN ドキュメントから:

ユーザーがページをサーバーに送信すると、検証コントロールが呼び出され、コントロールごとにユーザー入力がチェックされます。いずれかの入力コントロールで検証エラーが検出された場合、ページ自体が無効な状態に設定されるため、コードを実行する前に有効性をテストできます。

鉱山を強調します。「ページを無効な状態に設定する」と言うとき、彼らはPage.IsValidプロパティを参照しています。したがって、サーバー側のコードを実行するときは、次のようにブロックでラップする必要があります。

if(Page.IsValid)
{
    // Run code now that validation has been verified.
}

ポストバックを完全に防ぐには、JavaScript (クライアント側コード) を使用して、すべてのコントロールが有効な状態になるまで送信ボタンを無効にする必要があります。

于 2012-07-27T13:36:52.150 に答える
2

showFinalReviewAlert();ボタンのの値を返すことでOnClientClick、ページの検証がブロックされます。

これは事実上、レンダリングされている HTML です (表示用に簡略化されています)...

<input type="submit" 
       id="btnSaveChanges" 
       onclick="return showFinalReviewAlert();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnSaveChanges;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" 
       name="btnSaveChanges">

これの重要な部分は...

onclick="return showFinalReviewAlert();WebForm_DoPostBackWithOptions....

それが意味することは、何を返そshowFinalReviewAlert()WebForm_DoPostBackWithOptionsとしても、到達することは決してないということです。ただし、<input type="submit">ページであるため、とにかくサーバーにポストパックされます。

したがって、 の戻り値が value を返すshowFinalReviewAlertことによってポストバックの発生を停止する必要があるfalse場合は、属性を次のように設定する必要がありOnClientClickます...

OnClientClick="if(showFinalReviewAlert()==false){return false;}"

つまり、showFinalReviewAlert返された場合falseは、ボタンがポストバック処理を続行するのを停止します...しかし、返された場合trueは、ポストバックの検証が行われるようにします。

一方、 の結果がshowFinalReviewAlert()問題にならない場合は、単純に を削除しreturnて単純に...

OnClientClick="showFinalReviewAlert();"
于 2012-07-27T13:50:37.040 に答える
0

それはあなたが使用したからです:

OnClientClick="return showFinalReviewAlert();"

で何をしていshowFinalReviewAlert();"ますか?

内部でできることは、ページのポストバックを停止するshowFinalReviewAlert();"add です。return false

<script language="javascript">
    function showFinalReviewAlert() {
        //
        //   Your coding stuffs...
        //
        return false;
    }
</script>
于 2012-07-27T13:36:41.063 に答える