#c# #asp.net #viewstate
#c# #asp.net #viewstate
Вопрос:
Я написал пользовательский элемент управления InputDetails, в котором есть несколько текстовых полей и несколько переключателей внутри него.
Я добавляю его динамически во время загрузки страницы:
if(!Page.IsPostBack()){
InputDetails input = (InputDetails)Page.LoadControl("InputDetails.ascx");
PlaceHolder1.Controls.Add(input);
}
но когда я обновляю страницу, элемент управления исчезает, поэтому я спрашиваю, как мне сохранить пользовательский элемент управления в том состоянии просмотра, в котором он был добавлен, чтобы он автоматически перезагружал его в следующий раз. А еще лучше, как мне прочитать значения, введенные в текстовые поля пользовательского элемента управления, когда страница отправляется обратно? Мне нужно иметь возможность добавлять несколько входных данных на одной странице, чтобы сохранить их было бы полезно.
Комментарии:
1. Как упоминал Лукас, удалите проверку обратной передачи, и это сработает. Динамически созданные элементы управления должны быть воссозданы при каждой обратной передаче. ASP.NET автоматически восстановит значения (например
TextBox.Text
) из ViewState, если вы не измените идентификаторы элементов управления вручную.
Ответ №1:
Если вы добавляете элемент управления на страницу динамически, вам придется воссоздавать его после каждой обратной передачи. Попробуйте удалить if (Страница.Используйте строку postback()) и проверьте, работает ли она :). Для каждого создаваемого элемента управления вы также должны устанавливать одно и то же значение ID при каждом его создании. Если других проблем нет, ViewState должен иметь возможность сохранять состояние элементов управления при обратной передаче.
Чтобы прочитать значения, вы можете:
- добавьте некоторые общедоступные свойства в свой пользовательский элемент управления, чтобы получить доступ к нужным вам значениям или
- используйте текстовое поле txtBox = (TextBox)myCustomControlObject .Метод поиска FindControl(«nestedTextBox») (дополнительная информация здесь: http://msdn.microsoft.com/en-us/library/486wc64h.aspx )
Ответ №2:
Вы также можете динамически загружать пользовательские элементы управления / серверный элемент управления с помощью AJAX, а viewstate требует идентификатора элемента управления для правильного хранения viewstate.
не могли бы вы, пожалуйста, перейти по этой ссылке для получения дополнительной информации
Комментарии:
1. ASP.NET сохранит ViewState для динамического управления, даже если вы не назначаете идентификаторы явно, потому что идентификатор будет создан в соответствии с положением элемента управления в его основном контейнере (в данном случае заполнителе). Кроме того, AJAX не имеет никакого отношения к этому вопросу.