在c# web应用程序中通过会话保存数据

本文关键字:会话 保存 数据 web 应用程序 | 更新日期: 2023-09-27 18:06:57

我尝试创建一个web应用程序,有一个按钮,改变图像。这是我的代码:

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;
        }
    }
}

我的问题是每次页面重新加载。意思是,在我点击"测试"按钮后,返回到它的初始值。我如何拥有一个可以在整个会话中访问的变量?
请注意,我不想解决这个特定的图像问题,但要知道如何保持数据,直到用户关闭页面。

在c# web应用程序中通过会话保存数据

您可以在Session

中存储任意值
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;

. NET webforms是无状态的,所以这是设计的。

你可以将bool变量存储在页面的ViewState中,这样你就可以一直在同一页面中更新和保存它。

会话也会工作,但我会把这个本地页面相关的变量在ViewState,因为它将只在这个页面使用(我猜)

将变量存储在cookie中!:)

的例子:

var yourCookie = new HttpCookie("test", true);
Response.Cookies.Add(yourCookie);

Session["show_image"] = "true";

要达到您想要的效果,您需要检查是否为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;
    }
}

但是,不要那样做。你处理这个问题的方法不对。你不会想在Session中存储图像是否显示之类的东西。在不知道你所面临的具体问题的情况下,很难提出一个方法。

与前面提到的方法相比,另一种方法是将数据存储在ViewState中。如果它只是在回发情况下使用,那可能是一种可行的方法。

ViewState["test"] = true;

您节省了服务器上的内存,但使用了一点点带宽。当用户浏览到另一个页面时,数据会丢失。