如何在回发

时间:2016-10-15 11:53:50

标签: c# asp.net webforms telerik dynamic-usercontrols

我有一个动态添加到Panel的用户控件。我还在aspx页面中有一些其他功能,例如搜索,它位于更新面板内,导致页面回发。从我到目前为止所读到的是,动态控制需要绑定在每个页面加载上。这工作正常,但问题是用户控件需要一些时间(如3s),因此所有请求操作都需要更长时间,因为每次都绑定用户控件。

如果我在Page.IsPostBack条件中加载用户控件并仅在页面加载时加载它,则在回发时可以看到用户控件,但用户控件中的所有关联事件都不会触发。

那么,有没有一种方法可以将用户控制数据存储在会话中,然后在我知道数据不会改变时绑定它,从而减少加载用户控件的3s延迟。

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"]);
           }
    }

这也无法按预期工作。我没有得到用户控件中的任何数据。

用户控件有2 RadGrid和2 RadHTMLChart。我不想添加它,因为这已经是一个巨大的帖子了。用户控件中控件的数据也会再次存储在会话中以进行绑定。但我无法找到一种方法来使用绑定数据动态添加用户控件。

0 个答案:

没有答案