代码之家  ›  专栏  ›  技术社区  ›  Shagglez

ViewState的替代方案

  •  2
  • Shagglez  · 技术社区  · 15 年前

    5 回复  |  直到 15 年前
        1
  •  2
  •   sgmeyer    15 年前

    您可以使用会话来存储数据。我不确定你系统的用户数量,但假设你想存储的数据很小,这不会是个问题

    此外,除非您正在使用SessionPageStatePersister(或另一个服务器端persister)或加密您的ViewState,否则用户仍然可以更改ViewState。可能会更难,但还是有可能的。默认情况下,ViewState使用HiddenFieldPageStatePersister,并将ViewState存储在每个页面的隐藏字段中(作为编码字符串)。只是一些值得考虑的事情。

        2
  •  0
  •   GvS    15 年前

    根据范围: Session Application


    如果希望每个用户存储数据

    应用程序
    如果希望存储的数据可供所有用户使用

        3
  •  0
  •   Joachim VR    15 年前

        4
  •  0
  •   Brian Mains    15 年前

    会话可能在PreInit中不可用,但是您可以将它们存储在变量中,直到以后的页面生命周期任务完成,然后在那时将它们存储在会话中。我可能会搞错会话功能。此外,缓存是一个选项,但缓存不是特定于用户的;可以通过附加用户ID或会话ID使其特定于用户。

        5
  •  0
  •   CodexArcanum    15 年前

    会话可能是您的最佳选择。我们必须使用会话来存储一些用户信息,但由于访问太早而遇到了错误。虫子是 [HttpException]: Session state has created a session id, but cannot save it because the response was already flushed by the application." 但它通常会显示为pagerequestmangerparserrorexception。非常有趣的狩猎。一个骇人听闻的解决方案是将以下代码写入Global.asax代码:

    public Session_Start(object sender, EventArgs e)
    {
        string sessionId = Session.SessionID;
    }
    

    在会话(或应用程序)之外,您还有两个其他选项:客户机存储和持久存储。后者是一种奇特的说法“把它塞进数据库”,当然,也有类似的说法。

    客户端存储类似于viewstate,但更受控制。您可以使用隐藏字段或cookie。事实上,cookie可能对您很有用,但是如果您希望用户不去管它,则需要对其中的信息进行加密。不管怎样,你发送给客户的任何东西你必须假定是被破坏的,所以一定要做一个有效性检查。