ViewState не запоминает значение предыдущей страницы init

Что я тут не так делаю. Я не могу заставить ViewState работать:

protected void Page_Init(object sender, EventArgs e)
{
            Method1();
}

private void Method1()
{
    Element.Click += new EventHandler(Button_Click);
}
public void Button_Click(object sender, EventArgs e)
{
    if(ViewState["x"] != null) 
               // use ViewState["x"] from previous Page Init
    //do processing ...

    //in the end, store value for future use
    ViewState["x"] = myLabel.Text;
}

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

Проблема в том, что мой ViewState имеет значение NULL, он не хранит / не запоминает значение, которое я дал ему на предыдущей странице init Спасибо

2 ответа

Вы не можете сделать это как ViewState является специфичным для страницы и фактически сохраняется в HTML отображаемой страницы. Вам нужно будет передать значение через POST или в строке запроса, или сохраните ее в сеансе, или вы можете кэшировать значение в кэше asp.net, к которому вы сможете получить доступ на другой странице.

Ты можешь использовать ViewState перенести данные на ту же страницу на Postback.

Для настройки ViewState:

ViewState["FirstName"] = "SuperMan";

Для получения ViewState на обратной передаче:

string sFirstName = ViewState["FirstName"].ToString();

Вы можете использовать контекст для передачи данных с одной страницы на другую.

Page1.aspx.cs

this.Context.Items["FirstName"] = "SuperMan";

Page2.aspx.cs

string sFirstName = this.Context.Items["FirstName"].ToString();

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

Для настройки Session:

Session["FirstName"] = "SuperMan";

Применяется к вашему коду:

public void Button_Click(object sender, EventArgs e)
{
    if (Session["x"] != null)
    { 
        // do processing

        // in the end, store value for future use
        Session["x"] = myLabel.Text;
    }
}

Для получения Session с любой страницы до окончания сессии:

string sFirstName = Session["FirstName"].ToString();

Так же, как вы можете использовать Cookies также, но куки будут храниться на клиенте.

ViewState просто запоминает значение на своей странице и не может передать значение на другую страницу для использования другого состояния сеанса, такого как переменная сеанса, строка запроса и т. Д.

простая переменная сеанса, как это

public void Button_Click(object sender, EventArgs e)
{
    if(Session["x"] != null) 
               // use Session["x"] from previous Page Init
    //do processing ...

    //in the end, store value for future use
    Session["x"] = myLabel.Text;
}
Другие вопросы по тегам