通过C#Web应用程序中的会话保存数据

时间:2011-08-30 14:20:17

标签: c# .net asp.net web-applications

我尝试创建一个带有更改图像按钮的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;
        }

    }
}

我的问题是每次都重新加载页面。意思是,在我点击按钮“test”后返回它的初始值。我怎样才能拥有一个可以通过会话访问的变量?
请注意,我不想解决这个特定的图像问题,而是知道如何在用户关闭页面之前保留数据。

6 个答案:

答案 0 :(得分:6)

您可以在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;

答案 1 :(得分:2)

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

您可以将bool变量存储在页面的ViewState中,这样您就可以随时更新并保留在同一页面中。

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

答案 2 :(得分:1)

将变量存储在cookie中! :)

示例:

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

答案 3 :(得分:1)

Session["show_image"] = "true";

答案 4 :(得分:0)

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

}

但是,不要这样做。你正在接近这个错误。您不希望在会话中存储诸如是否显示此图像等内容。在不知道您所面临的具体问题的情况下,很难建议一种方法。

答案 5 :(得分:0)

除了已经提到的另一种选择是将数据存储在ViewState中。如果它仅用于回发情况,那可能是一种可能的方式。

ViewState["test"] = true;

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