В моем пользовательском элементе управления я заполняю список с помощью коллекции и хочу сохранить данные в viewstate \ controlstate для дальнейшей автоматической обратной отправки.
protected void btFind_Click(object sender, EventArgs e)
{
var accounts = new AccountWrapper[2];
accounts[0] = new AccountWrapper { Id = 1, Name = "1" };
accounts[1] = new AccountWrapper { Id = 2, Name = "2" };
lbUsers.DataSource = accounts;
lbUsers.DataBind();
ViewState["data"] = accounts;
}
ListBox заполняется при нажатии кнопки. Когда я сохраняю учетные записи в ViewState, listBox пуст, когда не показывает коллекцию хорошо. В чем причина такого поведения?
После нажатия кнопки выполняется PostBack, и ListBox теряет свое состояние.
void lbUsers_DataBinding(object sender, EventArgs e)
{
if (this.IsPostBack &&)
{
AccountWrapper[] accounts = this.ViewState["data"] as AccountWrapper[];
if (accounts!= null)
{
lbUsers.DataSource = accounts;
lbUsers.DataBind();
}
}
}
(не забудьте подписаться на событие DataBinding
вашего ListBox в разметке)
Также я рекомендую вам инкапсулировать свой доступ к ViewState
:
private AccountWrapper[] Accounts
{
get { return this.ViewState["data"] as AccountWrapper[]; }
set { this.ViewState["data"] = value;
}