Es gibt nicht genügend Informationen. Wann erstellen Sie Steuerelemente? Wann fügen Sie sie zur Controls-Sammlung hinzu? Was ist Bedingung und ändert sich das beim Postback?
Der Viewstatus wird automatisch am Ende des Seitenzyklus gespeichert (Postback oder nicht), da die Steuerelemente zur richtigen Zeit hinzugefügt werden.
Wenn Sie später Kontrollen hinzufügen, in einigen Fällen nach der Initialisierung, ist es zu spät.
aktualisieren
Ohne Code ist es schwer zu erraten, wo der Bruch nach unten stattfindet. Untersuchen wir einen Repeater mit einer benutzerdefinierten Vorlage, die die Steuerelemente unter bestimmten Bedingungen laden kann. Dieses Beispiel funktioniert, aber es würde fehlschlagen, wenn die Vorlagenzuweisung auf Page_Load ausgeführt wurde. Ist das Ihrer Situation ähnlich?
Form:
<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>
Code:
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
}
Die Steuerelemente werden in Markup platziert und basierend auf einer Geschäftslogik werden sie in der Vorlage instanziiert. Der Ansichtszustand wird nicht geladen, da die Vorlage bei jedem Postback erneut mit einem neuen Satz von Steuerwerten instanziiert wird und der vorherige Ansichtszustand verloren geht. –
Ich kann nicht sagen, ohne den Code zu betrachten. Ich habe meine Antwort bearbeitet, um die theoretische Situation zu veranschaulichen. Ich weiß nicht, ob es dir ähnlich ist. – Ruslan