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