に動的に追加するユーザー コントロールがありますPanel
。aspx ページには、ページをポストバックさせる更新パネル内にある検索など、他にもいくつかの機能があります。私がこれまでに読んだことから、ページの読み込みごとに動的制御をバインドする必要があることがわかりました。これは問題なく動作しますが、問題は、ユーザー コントロールが毎回バインドされるため、ユーザー コントロールに少し時間がかかり (3 秒など)、すべての要求操作に時間がかかることです。
条件内でユーザー コントロールを読み込み、Page.IsPostBack
ページの読み込み時にのみ読み込むと、ポスト バック時にユーザー コントロールが表示されますが、ユーザー コントロールに関連付けられているすべてのイベントは発生しません。
それで、ユーザーコントロールデータをセッションに保存し、データが変更されないことがわかっている場合はそれをバインドして、ユーザーコントロールをロードするための3秒の遅延を減らす方法はありますか.
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadUserControl(); // Only loaded on page load.Faster, but user control
//functionalities break on post back. Maybe
// because it is not loaded again.
}
//LoadUserControl(); // User control loads fine. But even a totally unrelated
// post back causes the already loaded User Control to load
// again. 3s delay :(
}
ユーザーコントロールをロードするために使用されるメソッドは次のとおりです。
private void LoadUserControl()
{
var control = LoadControl("A Dynamic ascx page");
control.ID = "contentControl";
panel1.Controls.Clear(); //panel1 is the placeholder in aspx page
panel1.Controls.Add(control);
Session["LoadedControls"] = control;
}
そのため、ロードされたコントロールをセッションに保存し、プレースホルダーパネルに追加しようとしました
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadUserControl(); // Only loaded on page load.Faster, but user control
//functionalities break on post back. Maybe
// because it is not loaded again.
}
if ((Control)Session["LoadedControls"] != null)
{
panel1.Controls.Clear();
panel1.Controls.Add((Control)Session["LoadedControls"]);
}
}
これも期待どおりに機能しません。ユーザーコントロールに存在するデータを取得できません。
ユーザーコントロールには 2RadGrid
と 2がありRadHTMLChart
ます。これはすでに巨大な投稿であるため、追加したくありませんでした。ユーザーコントロール内のコントロールのデータも、再度バインドするためにセッションに保存されています。しかし、バインドされたデータを使用してユーザー コントロールを動的に追加する方法が見つかりません。