6

このような非常に簡単な他のソリューションを見てきましたが、javascript関数が単にconfirm('sure?');. いつブール値が返されるかわかりません。

そこで、すべての ASP.NET ボタンを次のように実装することにしました。

<button id="btnDelete" name="btnDelete" class="btn">Delete</button>
<asp:Button ID="_btnDelete" runat="server" OnClick="_btnDelete_Click" style="display:none;" />

$('#btnDelete').click(function (e) {
    $.blockUI({ message: $('#divConfirmDeleteModal'), overlayCSS: { cursor: 'default' }, css: { cursor: 'default' }, baseZ: 5555 });
    return false;
});

$('#btnDeleteYes').click(function () {
    $('#<%=_btnDelete.ClientID%>').trigger('click');
});

$('#<%=_btnDelete.ClientID%>').click(function (e) { 
    // the delay happens here. if i put an alert here, it fires,
    // but then the page just loads until eventually the method gets called
    <%= ClientScript.GetPostBackEventReference(_btnDelete, string.Empty) %>; 
});

..そして、今までしばらくはうまくいきました。IE (バージョン 10 でも) で問題が_btnDelete_Click発生しています。最終的にトリガーするボタンをクリックしてから呼び出されるまでに最大 2 分かかります。

ハックしすぎて、もっと良いアプローチがあるかどうか疑問に思っていました。

編集: これは別の「正しい」方法ですが、ブラウザーのネイティブの確認ダイアログを使用するのではなく、より洗練されたモーダル ダイアログを使用して、「はい」をクリックすると true を返すようにしたいと考えています。

edit2:私が求めているのは、複数のことを行う OnClientClick 関数のブール値を返す方法があると思います

4

3 に答える 3

3

クライアント スクリプトでクリック イベントを手動でトリガーすると、アプリケーションはモバイル ブラウザーの [移動] ボタンで正しく機能しません。

クライアント側で自分で手動でトリガーすることなく、ボタンのサーバー側クリック イベントをインターセプトする方法を次に示します。

<script type="text/javascript">
    function clientClick() {
        if (confirm("Are you sure you want to delete?")) {
            // Do something at client side before posting back to server
            return true;
        }
        return false;
    }
</script>

<asp:Button runat="server" ID="DeleteButton" Text="Delete" 
    OnClick="DeleteButton_Click" OnClientClick="return clientClick();" />

ASP.Net MVC を使用すると、さまざまな機能を実行できます。ただし、従来の ASP.Net では多くの問題が発生します。

于 2013-07-10T19:41:53.533 に答える
0

抑圧された記憶が呼び起こされる - 私は3.5年前にasp.net Webformsで同じ戦いをしていました。製品に何らかのコメント (再生品など) がある場合に備えて、Enter キーを押してモーダル ダイアログを表示し、注文を確認することで、グリッド内に ajax 呼び出しを実装する必要がありました。

いくつかの古いコードの断片を閲覧すると、デフォルトとバブリングを防ぐためのあらゆる種類の JavaScript が見つかりました

// prevent the browser event bubbling for example posting the webform
function stopDefault(e) {

    if (e.preventDefault) {
        e.preventDefault();
        e.stopPropagation();

    } else {
        event.returnValue = false;
        event.cancelBubble = true;
        e.returnValue = false;
        e.cancelBubble = true;              
    }
}

そして、このようなhtml / asp

<button type="button" 
     onclick="SearchProducts(event,this);">Search Products</button>
<asp:Button ID="btnSearch" ClientIDMode="Static" runat="server" 
 onclick="btnSearch_Click"  
 OnClientClick="SearchProducts(event,this)"
 UseSubmitBehavior="false"
 Text="Does nothing" />  

最終的には標準の html ボタンのみを使用し、asp:Button は使用しませんでした。これは、すべての組み込み関数や asp.net Web フォームの舞台裏の魔法と戦うのが面倒ではなかったからです。

asp:button を回避するオプションがある場合は、本当にお勧めできます。

于 2013-07-18T21:08:26.917 に答える