ViewState, UserControl и IsPostback
По сути, у меня есть раскрывающийся список и динамически добавляемый пользовательский элемент управления. Пользовательский элемент управления загружает сетку в зависимости от выбора, сделанного в раскрывающемся списке. Выпадающий список не является частью пользовательского элемента управления.
Теперь вопрос в том, как имитировать (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)4
Вы можете вносить изменения в элемент управления в событии предварительной визуализации. Когда это событие запускается, выполняются все остальные действия. Или вы можете сделать общедоступное свойство в пользовательском элементе управления и при настройке, требующей значения, реагировать соответствующим образом.
ViewState, к которому вы обращаетесь в своем пользовательском элементе управления, отличается от того, к которому вы обращаетесь на странице. Если вам нужно, чтобы ваша страница взаимодействовала с вашим пользовательским элементом управления, я предлагаю вам добавить для этой цели общедоступный метод в свой пользовательский элемент управления.
Если по какой-то причине вы предпочитаете что-то похожее на ваш подход ViewState, вы можете попробовать Context.Items. Обратите внимание, что Context.Items не сохраняется между запросами.