【问题标题】:Storing session variables in ASP.NET page?在 ASP.NET 页面中存储会话变量?
【发布时间】:2010-01-12 21:12:27
【问题描述】:

如何将具有整个会话范围的变量放在 ASP.NET 页面上(我的意思是在 aspx 页面后面的类中)?将变量放入 Session 对象的唯一方法是什么?

例如:

public partial class Test_ : System.Web.UI.Page
{
    private int idx = 0;

    protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Text = (idx++).ToString();
    }
}

我希望每次点击此按钮时我的索引都会上升。在不使用 Session 对象的情况下如何做到这一点?

提前 10 倍, 达尼尔

【问题讨论】:

  • 你反对 Session 对象有什么原因吗?从我的角度来看,这是一个会话变量,所以它属于它。
  • 过度依赖会话会导致服务器出现性能问题。对于 Marek 的回答 +1,viewstate 是最正确的选择,因为这是页面及其回发的本地。

标签: c# asp.net


【解决方案1】:

你可以把它放在ViewState

public partial class Test_ : System.Web.UI.Page {

    protected void Button1_Click(object sender, EventArgs e) {
        if(ViewState["idx"] == null) {
            ViewState["idx"] = 0;
        }
        int idx = Convert.ToInt32(ViewState["idx"]);

        Button1.Text = (idx++).ToString();

        ViewState["idx"] = idx;
    }
}

【讨论】:

  • 10 倍!这让我对这个问题有了一些了解;)我仍然会更深入地研究 seth 提出的文章。
  • 绝对是一本好书——显然有很多方法可以做到这一点。
【解决方案2】:

ViewState 似乎就是您在此处寻找的内容,只要该计数器不需要在此页面范围之外维护即可。请记住,页面刷新会重置计数器。此外,如果计数器是敏感信息,请注意它将存储(加密)在呈现的 HTML 中,而 Session 值存储在服务器端。

【讨论】:

    【解决方案3】:

    除了会话之外,还有许多选项。看看 Nine Options for Managing Persistent User State in Your ASP.NET Application

    对于此类数据,您可能希望使用会话存储。

    【讨论】:

    • 会话状态对于这样的数据来说是一个糟糕的选择,因为它可能必须为每个请求和站点上的每个页面写入和读取数据库,而不仅仅是页面需要它。
    猜你喜欢
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多