탐색 막대와 프로그래밍 방식으로로드 된 일부 사용자 정의 컨트롤 (ascx)을 사용하여 간단한 웹 페이지를 만들려고합니다. 모든 컨트롤은 업데이트 패널 안에 있습니다. 나는 다음과 같은 일을 할 (탐색 모음에서) 링크 버튼을 클릭하면 프로그래밍 방식으로로드 된 usercontrols에 대한 ViewState (Page_Load 이후에 복원 됨)
는 :- 내가 viewstate가를 사용하여 현재 UserControl을 저장합니다.
- 현재 사용자 컨트롤을 다시로드합니다.
내 'page_load'는 항상 현재 컨트롤을 다시로드합니다.
항상 프로그래밍 방식으로로드 된 컨트롤에 동일한 ID를 할당하면 usercontrol viewstate를 저장할 수 있습니다. 그럼 모든 것이 하나의 작은 점을 제외하면 좋아 보입니다. usercontrol에서 viewcontent가 사용 가능하지 않습니다. Page_Load!
(* 여기)를보십시오. 'txtTest.Text'값은 항상 "0"입니다 (또한 다시 게시하는 동안).
(usercontrol) Page_Load 후에 사용자 컨트롤 viewstate가 복원 된 것처럼 보입니다. 어떻게 가능합니까?
--- "Default.aspx를"---
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="sm" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="pnlMain" runat="server">
<ContentTemplate>
<div class="links">
<asp:LinkButton ID="lnkButton1" runat="server" OnClick="lnkButton1_Click" Text="Link 1"></asp:LinkButton>
<asp:LinkButton ID="lnkButton2" runat="server" OnClick="lnkButton2_Click" Text="Link 2"></asp:LinkButton>
</div>
<br />
<asp:Panel ID="pnlCtrl" runat="server"></asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
--- "하여 default.aspx.cs"---
private string CtrlAscx
{
get
{
if (ViewState["CtrlAscx"] == null)
{
ViewState["CtrlAscx"] = String.Empty;
}
return ViewState["CtrlAscx"].ToString();
}
set
{
ViewState["CtrlAscx"] = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
loadMyControl();
}
private void loadMyControl()
{
if (!String.IsNullOrEmpty(CtrlAscx))
{
pnlCtrl.Controls.Clear();
Control c = LoadControl(CtrlAscx);
c.ID = CtrlAscx + "ID"; // this line is mandatory in order to mantain the usercontrol viewstate
pnlCtrl.Controls.Add(c);
}
}
protected void lnkButton1_Click(Object sender, EventArgs e)
{
CtrlAscx = "Control1.ascx";
loadMyControl();
}
protected void lnkButton2_Click(Object sender, EventArgs e)
{
CtrlAscx = "Control2.ascx";
loadMyControl();
}
- "CONTROL1.ASCX "-
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Control1.ascx.cs" Inherits="WebTest.Control1" %>
Control1: <asp:TextBox id="txtTest" runat="server" Text="0"></asp:TextBox>
<asp:Button ID="btnTest" runat="server" />
-"CONTROL1.ASCX.CS "-
public partial class Control1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
if (txtTest.Text == "0") // * HERE
{
txtTest.Text = "1";
}
}
}
012 그것을 만들 때 3,516,
c.EnableViewState가 이미 true이고 txtText입니다. –