Как определить область действия переменной в этом примере C # Webforms? - PullRequest
0 голосов
/ 29 февраля 2012

Как передать эти значения двух переменных событию ShowFooBar click?

Когда я запускаю приведенный ниже код, переменные не имеют значений в операторе записи.

public partial class _Default : System.Web.UI.Page
{
    string foo = String.Empty;
    string bar = String.Empty;

    protected void Submit_Click(object sender, EventArgs e)
    {
        if (SomeCondition(x,y))
        {
            foo = "apple";
            bar = "orange";
        }
    }

    protected void ShowFooBar_Click(object sender, EventArgs e)
    {
        Response.Write("foo=" + foo + "& bar=" + bar);
    }
}

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Веб-формы не сохраняют состояние, что означает, что каждый раз, когда вы отправляете сообщение в одно из этих событий щелчка, из класса _Default будет создан новый объект страницы, где экземпляры foo и bar создаются как пустые строки, поэтому событие ShowFooBar_Click будет отображать именно это.
Если вы хотите сохранить значения foo и bar между запросами, вам придется их где-то хранить и извлекать во время запроса события.В зависимости от ваших потребностей доступны различные параметры, такие как Session, ViewState, скрытые поля и т. Д. Например:

    protected void Submit_Click(object sender, EventArgs e)
    {
        if (SomeCondition(x,y))
        {
            ViewState["foo"] = "apple";
            ViewState["bar"] = "orange";
        }
    }

    protected void ShowFooBar_Click(object sender, EventArgs e)
    {
        if(ViewState["foo"] != null && ViewState["bar"] != null)
        {
            Response.Write("foo=" + ViewState["foo"] + "& bar=" + ViewState["bar"]);
        }
    }
0 голосов
/ 29 февраля 2012
public partial class _Default : System.Web.UI.Page
{
    protected void Submit_Click(object sender, EventArgs e)
    {
        if (SomeCondition(x, y))
        {
            ViewState["foo"] = "apple";
            ViewState["bar"] = "orange";
        }
    }

    protected void ShowFooBar_Click(object sender, EventArgs e)
    {
        Response.Write("foo=" + ViewState["foo"].ToString() + "& bar=" + ViewState["bar"].ToString());
    }
}
0 голосов
/ 29 февраля 2012

Нет, они не будут.При каждой обратной передаче класс повторно создается, поэтому значения исчезают.Вы можете сохранить их в файле cookie или базе данных или добавить их в качестве полей формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...