Согласно сообщению об исключении, System.Web.UI.WebControls.Button
не сериализуемо. (Это не удивительно.) Чтобы сохранить что-то во ViewState, оно должно быть сериализуемым, чтобы его полное «я» могло быть записано в строку и сохранено в значении формы hidden
на странице для ViewState.
Почему вы пытаетесь сохранить Button
s во ViewState? ViewState полезен для хранения небольших значений и других вещей, скрытых в форме поля. Но весь интерфейс управления? Что вы пытаетесь сделать с этим?
Если вам просто нужно динамически создавать Button
элементы управления на основе некоторых данных из ViewState, то вам просто нужно сохранить минимальный объем данных, чтобы сделать это возможным, и создать Button
s в коде из этих данных. Примерно так:
List<string> btn = (List<string>)ViewState["ButtonStrings"];
foreach (var str in btn)
{
var item = new Button();
item.Width = 20;
item.Command += obtainTopicsPerPage_Click;
item.CommandName = tPage.ToString();
item.Text = tPage.ToString();
// some use of the str from the ViewState
// or if all you need is a count, just store an int in ViewState and use a for loop
}