私はTestPanelとHeaderの2つのカスタムコントロールを持っています。どちらもパネルです。 TestPanelにもヘッダーが含まれています。 TestPanelとHeaderにはTestという文字列プロパティが1つしか含まれていません。aspnet customcontrol in customcontrol losts viewstate
フォームにヘッダーのみを置くことができます。それはうまくいく。 フォームにTestPanelを置くことができ、TestPanel + 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"