Сохраните данные для UserControl to ViewState

В моем пользовательском элементе управления я заполняю список с помощью коллекции и хочу сохранить данные в 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 пуст, когда не показывает коллекцию хорошо. В чем причина такого поведения?

1
задан abatishchev 5 August 2010 в 10:00
поделиться

1 ответ

После нажатия кнопки выполняется 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;
}
2
ответ дан 2 September 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: