0

私の質問は、コントロールUpdatePanelに関するものです。

UpdatePanel:基本的に、ページにUpdatePanelがほとんどなく、ネットワードデータに高額なデータをロードするため、すべてをロードする必要がない場合があります。そのため、UpdatePanel内のコンテンツをオンデマンドでロードする方法を知りたいのです。

JQueryの使用:UpdatePanelの読み込みはJQuery関数呼び出しによって行われる必要があるため、方法はわかりませんが、JQueryを使用すると、「LoadUpdatePanel( "idOfUpdatePanel")」と言うことができ、そのコンテンツが読み込まれるはずです。

UpdatePanelとJQueryを使用してこの問題を解決する方法、またはどの方向に調査する必要があるかについてのアイデアはありますか?

4

1 に答える 1

0

UpdatePanelではそれを行うことはできません。UpdatePanelは、ビューステートを含むすべての投稿データと、背後のコードに自動的に接続されて機能します。

UpdatePanelを1つだけ取得するためにコードビハインドを実行することはできません。完全なサイクルを実行する必要があります。

あなたにできること

リクエストが同じUpdatePanelからのものではないかどうかを確認することで、一部の関数の背後にあるコードで実行することを回避できます。

たとえば、4つの更新パネルがあり、更新パネル2がポストバックで起動されたとします。次に、ページの読み込みに関する残りの更新パネルで、次のようなことを行うことができます

protected void Page_Load(object sender, EventArgs e)
{
    if (IsUpdatePanelInRendering(Page, upUpdatePanelId))
    {
        // run the code for update panel 1, me
        // ...
    }
}

ここで、IsUpdatePanelInRendering:

public static bool IsUpdatePanelInRendering(Page page, UpdatePanel panel)
{
    Debug.Assert(HttpContext.Current != null, "Where are you called ? HttpContext.Current is null ");
    Debug.Assert(HttpContext.Current.Request != null, "Where are you called HttpContext.Current.Request is null ");

    // if not post back, let it render
    if (false == page.IsPostBack)
    { 
        return true; 
    }
    else
    {
        try
        {
            // or else check if need to be update
            ScriptManager sm = ScriptManager.GetCurrent(page);

            if (sm != null  && sm.IsInAsyncPostBack)
            {
                Debug.Assert(HttpContext.Current.Request.Form != null, "Why forms are null ?");

                string smFormValue = HttpContext.Current.Request.Form[sm.UniqueID];

                if (!string.IsNullOrEmpty(smFormValue))
                {
                    string[] uIDs = smFormValue.Split("|".ToCharArray());
                    if (uIDs.Length == 2)
                    {
                        if (!uIDs[0].Equals(panel.UniqueID, StringComparison.InvariantCultureIgnoreCase))
                        {
                            return false;
                        }
                    }
                }
            }
        }
        catch (Exception x)
        {
            Debug.Fail("Ops, what we lost here ?");
        }

        return true;
    }
}

相対:
UpdatePanelの投稿値の数を制限するにはどうすればよいですか?
非同期ポストバックでの実行の背後にあるユーザーコントロールコードを防ぐ方法は?

直接ajax呼び出し

より良い解決策ですが、難しい解決策は、UpdatePanelsを削除し、ajax呼び出しを使用して手動で更新を行うことです。

この場合、jQueryを使用し、データの送信と操作のコストを最小限に抑えながら、ページ上のあらゆるものを部分的に送信、部分的に更新できますが、コードとデザインが増えます。

于 2012-11-13T16:00:17.910 に答える