ViewState, UserControl и IsPostback - PullRequest
       10

ViewState, UserControl и IsPostback

1 голос
/ 28 февраля 2009

По сути, у меня есть выпадающий список и динамически добавленный пользовательский элемент управления. Пользовательский элемент управления загружает вид сетки в зависимости от выбора, который был сделан в раскрывающемся списке. Выпадающий список не является частью пользовательского элемента управления.

Теперь вопрос в том, как мне симулировать (isControlPostback = false) каждый раз, когда пользователь меняет выбор в раскрывающемся списке? Похоже, ViewState запоминает элемент управления.

Внутри моего пользовательского контроля у меня есть:

protected bool IsUserControlPostBack
{
    get
    {
        return this.ViewState["IsUserControlPostBack"] != null;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsUserControlPostBack)
    {
        ViewState.Add("IsUserControlPostBack", true);
        //load stuff in the grid view and bind it
    }
}

Когда пользователь меняет выбор в выпадающем списке, у меня появляется окно подтверждения JavaScript, и страница отправляется обратно. Так что событие OnSelectedIndexChanged для выпадающего списка не срабатывает. Я хотел бы удалить, чтобы сделать что-то подобное каждый раз, когда изменяется выбранный индекс: ViewState.Remove ( "IsUserControlPostBack");

Ответы [ 4 ]

1 голос
/ 28 февраля 2009

Вы можете внести изменения в элемент управления в событии prerender. Когда это событие срабатывает, все остальные действия выполняются. Или вы можете сделать общедоступным свойством в пользовательском контроле, и когда настройки, необходимые для значения, реагируют соответствующим образом.

1 голос
/ 02 марта 2009

ViewState, к которому вы получаете доступ в своем пользовательском элементе управления, не совпадает с тем, к которому вы обращаетесь на странице. Если вам нужно, чтобы ваша страница взаимодействовала с вашим пользовательским элементом управления, я предлагаю вам добавить общедоступный метод в ваш пользовательский элемент управления для этой цели.

Если по какой-то причине вы предпочитаете что-то похожее на ваш ViewState подход, вы можете попробовать Context.Items. Обратите внимание, что Context.Items не сохраняется между запросами.

0 голосов
/ 02 марта 2009

Для тех, кому интересно узнать ответ: В итоге я реализовал открытое свойство внутри пользовательского элемента управления и загрузил элемент управления внутри события SelectedIndexChanged из выпадающего списка сервера, а не OnInit. Это исключило необходимость явного использования Viewstate.

0 голосов
/ 28 февраля 2009

Добавьте элемент управления на страницу где-то перед OnLoad. Например. OnInit. Между OnInit и OnLoad загружается состояние просмотра и запускаются события обратной передачи.

...