Я пытаюсь использовать ViewState для сохранения ввода моего текстового поля во время обратной передачи. Вот код:Код ASPX за ViewState не сохраняется
private Label store_Incident_Number = new Label();
private TextBox Incident_Number = new TextBox();
protected void Page_Load(object sender, EventArgs e)
{
if (ViewState["Incident_Number"] != null)
{
store_Incident_Number.Text = "TEST" + (string)ViewState["Incident_Number"];
Panel1.Controls.Add(store_Incident_Number);
}
}
void Page_PreRender(object sender, EventArgs e)
{
ViewState.Add("Incident_Number", Incident_Number.Text);
}
код, расположенный в моем default.aspx.cs (код позади). Panel1
- это asp control, где на веб-странице вне тега формы. Я пытаюсь следовать этому примеру: https://msdn.microsoft.com/en-us/library/ms227551(v=vs.85).aspx
Я надеялся, что текст текстового поля Incident_Number сохраняется на ярлыке после того, как страница отправлена обратно, но она не работает, и я не мог понять проблему. Обратите внимание, что текстовое поле динамически добавляется к форме страницы и воссоздается каждый ответ. Мой вопрос заключается в том, как я кодирую, чтобы сохранить значение текстового поля после того, как страница будет отправлена обратно?
EDIT: Исправлено! См. Мой принятый ответ. Кроме того, любой обработчик событий или другой процесс, который может инициировать другой обратный вызов во время Page_Init, обновит ваше значение, сохраненное в viewstate (т. Е. Сохраненный текст исчез).
Я думаю, что вы работаете тяжелее, чем вам нужно. Если вы используете элементы управления в среде ASP.NET WebForms, многие, включая TextBox, имеют автоматическое управление представлением в представлении, если вы правильно управляете жизненным циклом страницы. Добавьте TextBox в форму в событии Page_Init, тогда его состояние будет автоматически восстановлено до возникновения события Page_Load (при условии, что он имеет одинаковый идентификатор каждый раз), поэтому текст, введенный пользователем, будет сохранен. – user2638401