Пользовательский контент USERCONTROL в UpdatePanel исчезает на кнопке нажмите Отступность

StackOverflow https://stackoverflow.com//questions/9689067

Вопрос

У меня есть следующая функция, которая обновляет содержимое обновленияPanel, добавив / загрузку пользовательского USERCONTROL 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();            
                }
.

MESTERPAGE UPDATEPANEL:

<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>            
.

Я звоню на NavipateTab_click из моего контроля навигации, который является еще одним пользовательским управлением ASCX, мой объект управления Ctrl, который загружается динамически на каждом имеет кнопку и метку, когда я нажимаю кнопку, она просто переназначивает некоторые текст на метку.

И у меня есть следующий код в моей MeedPage, просто чтобы получить путь управления 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, вызывая функцию navipateTab_click, я вижу мой Ctrl в заполнителе и имеет кнопку и ярлык, но проблема в том, что если я нажму эту кнопку, она должна переназначить метку для некоторого текстаНо вместо этого все контент управления CTRL исчезает, пожалуйста, помогите.

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top