Вопрос

Я пытаюсь установить переменную ViewState при нажатии кнопки, но это работает только при втором нажатии кнопки.Вот код, лежащий в основе:

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
    }
}

private string YourName
{
    get { return (string)ViewState["YourName"]; }
    set { ViewState["YourName"] = value; }
}


protected void btnSubmit_Click(object sender, EventArgs e)
{
    YourName = txtName.Text;

}

Есть ли что-то, чего мне не хватает?Вот форма-часть файла дизайна, очень простая, просто как POC ( ПОК ):

<form id="form1" runat="server">
<div>
Enter your name: <asp:TextBox runat="server" ID="txtName"></asp:TextBox>
<asp:Button runat="server" ID="btnSubmit" Text="OK" onclick="btnSubmit_Click" />
<hr />
<label id="lblInfo" runat="server"></label>
</div>
</form>

PS: Пример очень упрощен: "используйте txtName.Text вместо ViewState" - неправильный ответ, мне нужно, чтобы информация была в ViewState.

Это было полезно?

Решение

Page_Load пожары до того, как btnSubmit_Click.

Если вы хотите что-то сделать после запуска ваших событий обратной передачи, используйте Page_PreRender.

//this will work because YourName has now been set by the click event
protected void Page_PreRender(object sender, EventArgs e)
{
    if (Page.IsPostBack)
        lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
}

Основной порядок гласит:

  • Срабатывает инициализация страницы (инициализация не может получить доступ к ViewState)
  • Состояние просмотра считывается
  • Срабатывает при загрузке страницы
  • Любые события приводят к пожару
  • Предварительные пожары
  • Рендеринг страницы
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top