Сохранить данные для UserControl в ViewState - PullRequest
1 голос
/ 05 августа 2010

В моем пользовательском контроле я заполняю список списком и хочу сохранить данные в 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 Ответ

2 голосов
/ 05 августа 2010

После нажатия вашей кнопки происходит 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;
}
...