我尝试创建一个带有更改图像按钮的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”后返回它的初始值。我怎样才能拥有一个可以通过会话访问的变量?
请注意,我不想解决这个特定的图像问题,而是知道如何在用户关闭页面之前保留数据。
答案 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;
您在服务器上节省了内存,但使用了一点带宽。当用户浏览另一页时,数据会丢失。