0

delete 関数内の Ajax-Call が失敗した場合にのみポストバックする必要がある LinkBut​​ton があります。ajax-call は、行の削除が何らかの理由で失敗した場合に例外をスローする Webmethod を呼び出します。例外をスローすると、ajax 呼び出しが「エラー」ブランチに到達します (予想どおり)。ただし、「deleteSelectedRows」関数が false を返す場合、ポストバックは停止されていません。どうすればこれをアーカイブできますか?

<asp:LinkButton ID="Delete" ClientIDMode="Static" runat="server" Text="Delete" OnClientClick="return deleteSelectedRows()" ></asp:LinkButton>

//the jquery code
function deleteSelectedRows() {
        //get selected rows
        var selectedRows = ... getting ids ...

        var postData = "{ 'IDs':'" + selectedRows + "'}";
        var url = "WebMethods.aspx/DeleteRows";
        var status= jQuery.ajax({
            url: url,
            dataType: "html",
            async: false,
            type: "POST",
            data: postData,
            contentType: "application/json; charset=utf-8",
            success: function (msg) {
                return true;//continue postback
            },
            error: function (err) {
                jQuery.jGrowl('Fehler: Auftragspositionen konnten nicht gelöscht werden! Möglicherweise existieren bereits Transaktionen zu dieser Auftragsposition.');
                //e.preventDefault();
                return false;//stop postback
            }
        });
        return status.status == 200;//true when delete worked, false otherwise
    }

編集:これは、asp:Linkbutton の代わりに asp:Button を使用すると機能します...しかし、理由がわかりません!

4

1 に答える 1

0

わかりました、私はそれを解決しました:問題は、リンクが無効になっている場合にリンクの実行を停止するために使用した次のコードが原因でした(おそらくこれは他の誰かにとっても役立つので、ここに投稿します):

jQuery('.btn[onclick]').each(function () {
    //override onclick so i can check if the link is disabled before execution
    jQuery(this).data('onclick', this.onclick);

    this.onclick = function (event) {
        if (jQuery(this).hasClass('aspNetDisabled')) { //disabled link
            return false;//prevent execution
        };

        //execute link
        jQuery(this).data('onclick').call(this, event || window.event);
    };
});

私はこれを次のように変更しました。

jQuery('.btn[onclick]').each(function () {
    //override onclick so i can check if the link is disabled before execution
    jQuery(this).data('onclick', this.onclick);

    this.onclick = function (event) {
        if (jQuery(this).hasClass('aspNetDisabled')) { //disabled link
            return false;//prevent execution
        };

        //execute link
        var boolVal = jQuery(this).data('onclick').call(this, event || window.event);
        return boolVal;
    };
});

私が提供した情報では質問を解決できなかったことを認めなければなりません!

于 2012-11-30T07:27:19.247 に答える