2

次のコンテンツページがあります...

  1. UpdatePanel1-エラー表示Divを
    含むには、両方のボタンの更新トリガーが含まれます
  2. UpdatePanel2-asp:buttonを含むプロセス1を含む
  3. updatePanel3-asp:buttonを含むプロセス2を含む
  4. ユーザーにポップアップ確認Jqueryメッセージボックスを表示するJavaScriptは、ユーザーが実行しているプロセスに基づいています。

UpdatePanel 2または3は、メニューオプションからのユーザーの選択に基づいて表示されます。

メニュー項目2を選択すると、このページが表示され、エラーメッセージが表示されます

ボタンをクリックすると、メッセージボックスがポップアップし、メッセージボックスの応答から__doPostbackを使用してページが正しく処理され、ページは完全なポストバックを実行します。

私はむしろ、ページが部分的なポストバックとそれが持っていたコンテンツを実行し、エラーが発生した場合はエラー表示部を表示したいと思います。どんな援助もいただければ幸いです。

ボタンについて特別なことは何もありません

<asp:Button ID="ResetSomething" runat="server" Text="ResetSomething" Width="275px" />

これがコンテンツページのスクリプトブロックです

    <script type="text/javascript" language="javascript">
<!--
    function pageLoad() {
        setform();

    };

    function setform() {
        var reset1_button = $('input[id*=ResetSomething]');
        var reset2_button = $('input[id*=ResetSomethingElse]');

        reset1_button.click(function() {
            var element = $(this);
            $.prompt('Message1', { show: 'slideDown', buttons: { Ok: true, Cancel: false },
                submit: function(v, m, f) { submit_reset_callback(v, m, element); }
            });
            return (false);
        });

        var submit_reset_callback = function(result, messages, element) {
            if (result) { __doPostBack("ResetSomething");}
            return (false);
        };

        reset2_button.click(function() {
            var element = $(this);
            $.prompt('Message2', { show: 'slideDown', buttons: { Ok: true, Cancel: false },
                submit: function(v, m, f) { submit_update_callback(v, m, element); }
            });
            return (false);
        });

        var submit_update_callback = function(result, messages, element) {
            if (result) { __doPostBack("ResetSomethingElse"); }
            return (false);
        };
    };     
-->
</script>

これは、OnInitの背後にあるコードです。

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        this.PreLoad += (sender, args) =>
                            {

                                this.ClientScript.GetPostBackEventReference(this, "arg");

                                if (!IsPostBack) { return; }

                                string __targetaction = this.Request["__EVENTTARGET"];
                                string __args = this.Request["__EVENTARGUMENT"];

                                if (string.IsNullOrEmpty(__args)) return;

                                if (__targetaction == "ResetSomething")
                                {
                                    ResetSomething();
                                }
                                if (__targetaction == "ResetSomethingElse")
                                {
                                    ResetSomethingElse();
                                }
                                this.upnlNotifications.Update();
                            };
    }
4

2 に答える 2

3

__doPostBack以下の関数を定義し、呼び出しをに置き換えますdoPostBackAsync(controlId, null)

function doPostBackAsync(eventName, eventArgs) {
    var prm = Sys.WebForms.PageRequestManager.getInstance();

    if (!Array.contains(prm._asyncPostBackControlIDs, eventName)) {
        prm._asyncPostBackControlIDs.push(eventName);
    }

    if (!Array.contains(prm._asyncPostBackControlClientIDs, eventName)) {
        prm._asyncPostBackControlClientIDs.push(eventName);
    }

    __doPostBack(eventName, eventArgs);
}
于 2011-07-29T14:48:11.147 に答える
0

controlIdは、非同期ポストバックを生成するためのボタンのIDである必要があります。そうでない場合、ページで完全なポストバックが発生します。そのためには、clientidmodeを静的として使用できます。

<asp:Button ID="button1" runat="server"  ClientIDMode="Static"/>

   //then you can use below code
   _doPostBack('button1', '');//clientidmode forces buttonid = id given by us

正しいか確認してください。

もしそうなら、あなたは全ページのポストバックの代わりに非同期のポストバックを得ることができます。

これは私を助けました。コメントをありがとう@Tim。

于 2014-08-12T15:16:17.803 に答える