Сохраняйте данные через сессию в веб-приложении C # - PullRequest
1 голос
/ 30 августа 2011

Я пытаюсь создать веб-приложение, в котором есть кнопка, которая меняет изображение. это мой код:

public partial class _Default : System.Web.UI.Page
{
    private bool test ;
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {

        if (test)
        {
            Image1.ImageUrl = @"~/images/il_570xN.183385863.jpg";
            test = false;
        }else
        {
            Image1.ImageUrl = @"~/images/BAG.png";
            test = true;
        }

    }
}

Моя проблема в том, что страница перезагружается каждый раз. Это означает, что после того, как я нажму кнопку «Тест», вернитесь к исходному значению. Как я могу иметь переменную, к которой я могу получить доступ через весь сеанс?
пожалуйста, обратите внимание, я не хочу решать эту конкретную проблему с изображением, но знаю, как хранить данные, пока пользователь не закроет страницу.

Ответы [ 6 ]

6 голосов
/ 30 августа 2011

Вы можете хранить произвольные значения в Сеанс

Session["someKey1"] = "My Special Value";
Session["someKey2"] = 34;

Или более сложные значения:

Session["myObjKey"] = new MyAwesomeObject();

И чтобы вернуть их обратно:

var myStr = Session["someKey1"] as String;
var myInt = Session["someKey2"] as Int32?;
var myObj = Session["myObjKey"] as MyAwesomeObject;
2 голосов
/ 30 августа 2011

ASP.NET веб-формы не сохраняют состояния, так что это дизайн.

вы можете хранить переменную bool в ViewState страницы, чтобы вы всегда обновляли ее и сохраняли на одной и той же странице.

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

1 голос
/ 30 августа 2011
Session["show_image"] = "true";
1 голос
/ 30 августа 2011

Сохраните переменную в файле cookie!:)

Пример:

var yourCookie = new HttpCookie("test", true);
Response.Cookies.Add(yourCookie);
0 голосов
/ 30 августа 2011

Другой вариант, кроме уже упомянутого, - хранить данные в ViewState.Если это просто используется в ситуациях обратной передачи, это может быть возможным.

ViewState["test"] = true;

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

0 голосов
/ 30 августа 2011

Чтобы достичь желаемого, вам нужно проверить, является ли PostBack или нет:

protected void Button1_Click(object sender, EventArgs e)
{

    if (test && !IsPostBack)
    {
        Image1.ImageUrl = @"~/images/il_570xN.183385863.jpg";
        test = false;
    }else
    {
        Image1.ImageUrl = @"~/images/BAG.png";
        test = true;
    }

}

НО, не делай так. Вы подходите к этому неправильно. Вы не захотите хранить в сеансе такие вещи, как показ этого изображения или нет и т. Д. Трудно предложить подход, не зная конкретной проблемы, с которой вы столкнулись.

...