문제

iaspx :

에있는 자리 표시 자에 ASCX 사용자 정의 UserControl을 추가 /로드하여 UpdatePanel 컨텐츠를 업데이트하는 다음과 같은 기능이 있습니다.
 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();            
                }
.

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

다른 사용자 정의 ASCX 컨트롤 인 내 탐색 제어에서 NavigationTab_Click을 호출하고 있습니다. 단추를 클릭하면 각 Ctrl 컨트롤 오브젝트가 동적으로로드되는 Ctrl 컨트롤 오브젝트가 단순히 라벨에 일부 텍스트를 재 할당합니다.

및 i ASCX 제어 경로를 가져 오기 위해 MasterPage에 다음 코드가 있습니다.

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

                base.OnInit(e);          
        } 
.

지금까지 모든 것이 좋습니다. vavigationTab_click 함수를 호출하여 Ctrl 객체를로드 한 후 자리 표시 자에 내 Ctrl이 표시되고 버튼과 레이블이 있지만 문제는이 버튼을 클릭하면이 버튼을 클릭하여 라벨을 일부 텍스트로 재 할당해야합니다.대신 전체 Ctrl 컨트롤 콘텐츠가 사라지면 도움을주십시오.

도움이 되었습니까?

해결책

컨트롤을 동적으로 추가 할 때 모든 포스트백에서 다시 작성되었는지 확인해야합니다. 이전과 동일한 ID를 할당해야합니다. 그렇지 않으면 이벤트가 올바르게 트리거되지 않고 ViewState에서 값을 다시로드 할 수 없습니다. 최신 (page_init에서 더 나은)에서 page_load를 수행해야합니다.

가능할 때마다 동적 컨트롤을 피해야하는 이유입니다.

그래서 당신이 한 것처럼 이벤트 핸들러에 컨트롤을 추가 할 수 있습니다. 그러나 다음 포스트 백에서 다시 작성해야합니다. 그래서 당신은 어딘가에있는 (f.e. ids) 또는 이미 작성된 통제 수를 저장해야합니다. 예를 들어 ViewState 또는 Session에서 수행 할 수 있습니다. 그런 다음 컨트롤에 적절한 ID를 할당 할 수 있습니다 (예 : 색인 또는 ID 접미사와 함께).

다음은이 주제에 대한 몇 가지 추가 정보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top