Должны ли публичные свойства в коде ASP.NET сохраняться между загрузками страниц? - PullRequest
2 голосов
/ 24 сентября 2011

Я пытаюсь перехватить HTTP_REFERER при событии page_load на странице ASP.NET и сохранить его между постбэками, пока он мне не понадобится позже.Способ, которым я пытаюсь это сделать, не работает:

public partial class About : System.Web.UI.Page
{
    public string ReferringPage { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ReferringPage = 
              Request.ServerVariables["HTTP_REFERER"];
        }
    }

    protected void ImageButton1_Click(
         object sender, ImageClickEventArgs e)
    {
        Response.Redirect(ReferringPage);
    }
}

Я убедился, что URL-адрес ссылающейся страницы входит в свойство, но когда я нажимаю кнопку изображения, ReferringPage имеет значение null!Я думал, что значение свойства хранится в ViewState, так что оно будет доступно после обратной передачи, но, оказывается, это не так.Или я просто делаю это неправильно?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2011

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

1 голос
/ 01 декабря 2014

Нет, только [большинство] свойств элемента управления сохраняются на обратных передачах, поэтому вы можете сохранить ссылающуюся страницу в скрытом поле или в свойстве ViewState вашей страницы

Я часто использую этот фрагмент:

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

Это заставит ReferringPage работать как положено.Но будьте осторожны, как и любое сильнодействующее лекарство, злоупотребление ViewState считается вредным.* 1009.user) session

И, наконец, вы можете взглянуть на механизм передачи сервера в webfoms (с дополнительным бонусом ссылок на методы сохранения данных)

http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx

...