【问题标题】:Save data through session in C# web application通过 C# Web 应用程序中的会话保存数据
【发布时间】:2011-08-30 14:20:17
【问题描述】:

我尝试创建一个 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# .net asp.net web-applications


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      ASP.NET 网络表单是无状态的,因此这是设计使然。

      您可以将 bool 变量存储在页面的 ViewState 中,这样您就可以始终在同一页面中对其进行更新和持久化。

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

      【讨论】:

      • 用户明确表示上面的例子不是他要解决的问题……而是在用户关闭浏览器之前如何存储值。根据定义,Session
      • 是的,你是对的,但从代码中他需要什么很清楚,我告诉我答案的不同之处:)
      【解决方案3】:

      将变量存储在 cookie 中! :)

      例子:

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

      【讨论】:

      • 我没有说它是完美的解决方案,他要求一个解决方案.. :)
      【解决方案4】:
      Session["show_image"] = "true";
      

      【讨论】:

      • 将会话变量存储在仅在一页中使用的坏主意!
      【解决方案5】:

      要实现您想要的,您需要检查是否是 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 中存储此图像是否显示等内容。如果不知道您面临的具体问题,很难提出一种方法。

      【讨论】:

        【解决方案6】:

        已经提到的另一个选项是将数据存储在 ViewState 中。如果只是在回发的情况下使用,这可能是一种可能的方式。

        ViewState["test"] = true;
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-17
          • 2021-09-30
          • 1970-01-01
          • 1970-01-01
          • 2013-11-23
          相关资源
          最近更新 更多