пользовательский контент пользовательского контроля в UpdatePanel исчезает при обратной передаче при нажатии кнопки - PullRequest
0 голосов
/ 13 марта 2012

У меня есть следующая функция, которая обновляет содержимое UpdatePanel, добавляя / загружая пользовательский элемент управления ascx в заполнитель, который находится в default.aspx:

 protected void NavigationTab_Click(string ascxpath)
                {           
                        Control ctrl = LoadControl(ascxpath);
                        //cphmaincontent is my asp ContenPlaceHoderId in masterpage
                        PlaceHolder phmaincontent = (PlaceHolder)cphmaincontent.FindControl("phmaincontent");
                        phmaincontent.Controls.Clear();
                        phmaincontent.Controls.Add(ctrl);
                        upmaincontent.Update();            
                }

Панель обновления главной страницы:

<asp:UpdatePanel ID="upmaincontent" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:Label ID="lbmsg" runat="server" Text=""></asp:Label>
                        <asp:ContentPlaceHolder ID="cphmaincontent" runat="server">                       
                        </asp:ContentPlaceHolder>                         
                    </ContentTemplate>
                </asp:UpdatePanel>            

Я вызываю NavigationTab_Click из моего элемента управления навигацией, который является другим настраиваемым элементом управления ascx, мой объект Ctrl Control, который динамически загружается для каждого, имеет кнопку и метку, когда я нажимаю кнопку, он просто переназначает некоторый текст для метки.

и у меня есть следующий код на главной странице, чтобы получить путь управления ascx:

protected override void OnInit(EventArgs e)
        {           
               //raising an event to set ascx path
                mainmenu.NavigatePath += new usercontrols.mainmenu.NavigationHandler(NavigationTab_Click);

                base.OnInit(e);          
        } 

пока все работает хорошо, после загрузки моего объекта ctrl с помощью вызова функции NavigationTab_Click я вижу мой ctrl в заполнителе и имеет кнопку и метку, но проблема в том, что если я нажму эту кнопку, ей следует переназначить метку какому-то тексту но вместо этого весь контрольный контент ctrl исчезает, помогите.

1 Ответ

0 голосов
/ 13 марта 2012

Когда вы добавляете элементы управления динамически, вы должны убедиться, что они воссоздаются при каждой обратной передаче.Вы также должны убедиться, что вы присваиваете тот же идентификатор, что и раньше, иначе события не будут запускаться правильно, а значения не могут быть перезагружены из ViewState.Это должно быть сделано не позднее Page_Load (лучше в Page_Init).

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

Таким образом, вы можете добавлять элементы управления в обработчики событий, как вы это сделали.Но они должны быть воссозданы на следующем постбэке.Поэтому вам нужно где-то хранить, что (например, идентификаторы) или сколько элементов управления уже создано.Это можно сделать, например, в ViewState или Session.Затем вы можете назначить соответствующие идентификаторы элементам управления (например, с индексом или суффиксом идентификатора).

Вот некоторые дополнительные сведения по этому вопросу:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...