1
我有兩個自定義控件TestPanel和Header。兩者都是面板。 TestPanel還包含Header。 TestPanel和Header只包含一個字符串屬性Test。aspnet自定義控件在自定義控件中丟失viewstate
我只能把表頭上的標題。然後它運作良好。 我可以把TestPanel放在我的表單上,它顯示TestPanel + Header。然後它不能按預期工作,因爲Header的ViewState丟失了(或者Header.Test失去其價值的另一個原因)。 這裏是我的代碼:
public class TestPanel : System.Web.UI.WebControls.Panel
{
Header myHeader;
public string Test //Test is Header property; set/get header Test property
{
get
{
return this.MyHeader.Test;
}
set
{
this.MyHeader.Test = value;
}
}
public Header MyHeader
{
get
{
return myHeader;
}
set
{
myHeader = value;
}
}
public TestPanel()
{
}
protected override void Render(HtmlTextWriter writer)
{
writer.Write(Test);
MyHeader.RenderControl(writer);
}
}
public class Header : System.Web.UI.WebControls.Panel
{
public string Test
{
get
{
string s = (string)ViewState[ID + "Test"];
return (s == null) ? String.Empty : s;
}
set
{
ViewState[ID + "Test"] = value;
}
}
public Header()
{
}
protected override void Render(HtmlTextWriter writer)
{
writer.Write(Test);
}
}
在我的網頁我用:
1)如果只有パ我的形式(不回發後工作):
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.panel.Test = "paneltest";
}
}
protected void Unnamed2_Click(object sender, EventArgs e)
{
}
2)如果只有我的網頁上的標題(這在回發後有效)
<my:MyHeader id="header" runat="server"></my:MyHeader >
this.header.Test = "headertest"