I가의 default.aspx에있는 자리에 ASCX 사용자 지정 UserControl을로드/추가하여 된 UpdatePanel 내용을 갱신 다음과 같은 기능 :사용자 지정 UserControl을 함량은 버튼을 클릭 포스트 백에 사라
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 : 나는 각에 동적으로로드하는 다른 사용자 정의 ASCX 컨트롤, 내 Ctrl 키를 제어 객체 내 탐색 컨트롤에서 NavigationTab_Click를 호출하고
<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 제어 경로를 얻기 위해 내 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);
}
지금까지 모든 것이 잘 작동
이 NavigationTab_Click 함수를 호출하여 내 Ctrl 키 객체를로드 한 후 나는 자리에서 내 Ctrl 키를 참조 버튼과 라벨이 있지만이 버튼을 클릭하면 라벨을 텍스트로 재 지정해야하지만 대신 전체 Ctrl 컨트롤의 내용이 사라집니다. 제발 도와주세요.
내 클래스가 직렬화 후 나는 각 컨트롤의 ViewState를 만들 필요가 있다고 생각 해달라고 할 경우 클래스 객체를 저장 한 다음 다시 캐스팅하고 컨트롤에 할당합니다. –
또한이 "ViewState ["ASCXPATH "] = ascxpath;"추가했습니다. ViewState [ "ASCXPATH"]! = null 인 경우 Page_Load()를 체크 한 다음 동일한 함수를 다시 호출 "NavigationTab_Click (ViewState ["ASCXPATH "]. ToString())) " 하지만 여전히 그것을로드 할 수 없기 때문에 ViewState ["ASCXPATH "] 여전히 null이 아니었다 고 생각했기 때문에 그것을 디버깅했기 때문에! –
@NazoTajrian : 컨트롤 인스턴스를 ViewState에 저장하지 말고 정보를 올바르게 다시 만들면됩니다. 사실 나는 왜 당신이 'Visible' 속성을 바꾸지 않고 페이지에 동적으로 추가하는지 그 이유를 밝히지 않았습니다. 고정 번호의 NavigationTabs가 있습니까? 당신이 yes로 대답 할 수 있다면, UserControl을 동적으로 추가하지 마십시오. –