c# - ASP.NET 服务器端 View 状态

标签 c# asp.net session viewstate session-state

我已经阅读了一些在服务器上存储 View 状态的方法:

Here is one

Here is another

但是它们有点复杂。我正在寻找一种无需序列化对象即可保留对象的方法。我可以使用 session 状态,但如果用户打开多个窗口,则可能会覆盖对象。

有没有简单的解决办法?

最佳答案

在这种情况下,我会使用唯一键将对象存储在 session 中,并将该键绑定(bind)到页面。所有这些都可以抽象为页面类的属性。

public string PersistanceKey
{
    get { 
        if(ViewState["PersistanceKey"] == null)
           ViewState["PersistanceKey"] = "Object" + Guid.NewGuid().ToString();

        return (string)ViewState["PersistanceKey"];
    }
}

public PersistanceObject Persistance
{
    get {
        if(Session[this.PersistanceKey] == null)
            Session[this.PersistanceKey] = new PersistanceObject();

        return (PersistanceObject)Session[this.PersistanceKey];
}

不同的 session key 将在每页的基础上允许不同的对象。或者,您可以考虑使用应用程序缓存(Cache 对象)自动从内存中删除陈旧条目,而不是使用 Session 对象,但这有其自身的注意事项。

应该注意的是,Joel 在他关于内存使用的回答中的警告是完全准确的。对于低内存、高使用率或大型持久性对象场景,这可能不是最佳想法。

关于c# - ASP.NET 服务器端 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/662880/

相关文章:

django - 如何判断 Django session 是否是新 session ?

java - Spring MVC session 最大生命周期

c# - 防止 MaskedTextbox 中出现空格

asp.net - 如何从_Layout.cshtml页面隐藏页面上的特定元素

.net - .NET 和 ASP.NET 有什么区别

asp.net - VB.net "' Me'仅在PageMethods内的实例方法中有效

Django删除的行存在吗?

c# - 使用 DocuSign REST API 身份验证登录

c# - 为什么在强制转换运算符中 double 隐式转换为 int?

javascript - 跨域SignalR导入问题