2011-08-30 56 views
1

我尝试创建一个具有用于更改图像的按钮的Web应用程序。这是我的代码:在C#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; 
     } 

    } 
} 

我的问题是每次刷新页面。意思是,我点击按钮“测试”后返回到它的初始值。我如何能够通过会话访问所有变量?
请注意,我不想解决这个特定的图像问题,但要知道如何保持数据,直到用户关闭页面。

回答

5

你可以存储在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

将变量存储在cookie中! :)

实施例:

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

naaaaaaaaahhhh! –

+0

我没有说这是完美的解决方案,他要求解决方案.. :) – Abbas

2

ASP.NET web表单是无国籍所以这是由设计。

您可以将您的bool变量存储在页面的ViewState中,以便您始终将其更新并保存在同一页面中。

会议也将工作,但我会把这个局部页面相关的变量在ViewState,因为它只会在这个页面(我猜)

+0

用户明确指出,上面的例子不是他想要解决的问题......而是如何存储值,直到用户关闭浏览器。根据定义,这是'会议' – Josh

+0

是的,你是对的,但从代码他需要的是明确的,我告诉我的回答中的差异:) –

1
Session["show_image"] = "true"; 
+1

坏主意存储在会话中变量只用于1页! –

0

达到你需要检查你想要什么,如果是回发或不为这样:

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中存储是否显示此图像等等。在不知道您面临的具体问题的情况下很难提出方法。

0

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

ViewState["test"] = true; 

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

相关问题