UpdatePanel의 사용자 지정 UserControl 컨텐츠가 버튼을 클릭합니다. 포스트 백 클릭
-
13-12-2019 - |
문제
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 접미사와 함께).
다음은이 주제에 대한 몇 가지 추가 정보입니다.