十分な情報がありません。コントロールはいつ作成しますか? それらを Controls コレクションにいつ追加しますか? 状態とは何ですか?ポストバックで変化しますか?
ビューステートは、適切なタイミングでコントロールが追加された場合、ページ サイクルの最後 (ポストバックかどうかに関係なく) に自動的に保存されます。
後でコントロールを追加する場合、何らかのイベントですべての初期化が完了した後では遅すぎます。
アップデート
コードがなければ、故障が発生した場所を推測するのは困難です。いくつかの条件に基づいてコントロールをロードできるカスタム テンプレートを使用して Repeater を調べてみましょう。このサンプルは機能していますが、テンプレートの割り当てが Page_Load で行われた場合は失敗します。これはあなたの状況に似ていますか?
形:
<div>
<asp:Repeater ID="repeater" runat="server" />
<asp:Button ID="submitButton" runat="server" Text="Submit" onclick="submitButton_Click" />
<asp:Button ID="postButton" runat="server" Text="PostBack" />
</div>
コード:
public partial class _Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
repeater.ItemTemplate = new MyTemplate();
}
protected void Page_Load(object sender, EventArgs e)
{
//however, if I was to move repeater.ItemTemplate = new MyTemplate() here
//it would not reload the view state
if (!IsPostBack)
{
repeater.DataSource = new int[] { 1, 2, 3, 4, 5 };
repeater.DataBind();
}
}
protected void submitButton_Click(object sender, EventArgs e)
{
submitButton.Text = "Do it again";
}
}
public class MyTemplate : IBindableTemplate, INamingContainer
{
#region IBindableTemplate Members
public System.Collections.Specialized.IOrderedDictionary ExtractValues(Control container)
{
OrderedDictionary dictionary = new OrderedDictionary();
return dictionary;
}
#endregion
#region ITemplate Members
public void InstantiateIn(Control container)
{
Label label = new Label();
label.Text = "Label";
container.Controls.Add(label);
TextBox textbox = new TextBox();
container.Controls.Add(textbox);
}
#endregion
}