Как повторно использовать уже привязанные данные в пользовательском элементе управления при обратной записи

У меня есть пользовательский элемент управления, который я динамически добавляю к 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"]);
           }
    }

это не работает так, как ожидалось. Я не получаю никаких данных, присутствующих в пользовательском элементе управления.

Пользовательский элемент управления имеет 2 RadGrid и 2 RadHTMLChart, Я не хотел добавлять его, так как это уже огромный пост. данные для элементов управления в пользовательских элементах управления также сохраняются в сеансе для повторного связывания. Но я не могу найти способ динамически добавлять пользовательский элемент управления со связанными данными.

0 ответов

Другие вопросы по тегам