在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;
}
}
}
我的问题是每次页面重新加载。意思是,在我点击"测试"按钮后,返回到它的初始值。我如何拥有一个可以在整个会话中访问的变量?
请注意,我不想解决这个特定的图像问题,但要知道如何保持数据,直到用户关闭页面。
您可以在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;
您节省了服务器上的内存,但使用了一点点带宽。当用户浏览到另一个页面时,数据会丢失。