【问题标题】:can we store viewstate in masterpage?我们可以将视图状态存储在母版页中吗?
【发布时间】:2009-11-16 18:00:00
【问题描述】:

例子

我有一个有多个客户的 gridview。 当用户点击客户链接时,CustomerId 存储在 Session“CustomerId”中。

如果我在多个选项卡上打开多个客户详细信息,则会话“CustomerId”将被覆盖。 因此将 customerid 存储在 Session 中是没有意义的。

我只想存储不同标签的客户 ID

有没有一种方法可以将 customerid 存储在母版页的视图状态中? (假设有一个母版页和多个内容页。)

【问题讨论】:

    标签: viewstate


    【解决方案1】:

    我通常尝试将 URL 用于特定于页面的状态信息。使用会话或其他一些共享存储很容易变得混乱。如果在 URL 中传递的状态数据量有点多,一种方法可能是重新设计在会话中存储信息的方式。通过创建一个用于保存所需数据的类,在会话中存储几个这样的对象并通过一些生成的请求 ID 来识别它们。然后可以在 url 中传递此请求 ID,以允许页面从会话对象中获取正确的状态信息。

    【讨论】:

    • +1,同意。它应该在网址中。当然,从 session 更改为 url 意味着跟踪所有链接和帖子,但必须这样做。
    • 我不想使用查询字符串,因为用户可以轻松操作 id。
    • @unknown user - Fredrik 专门解决了这个问题 - 用户只能在她的会话中弄乱对象的 ID,而不能直接使用 CustomerID。这使它成为一种安全的方法。
    【解决方案2】:

    没有。母版页不会在对不同页面的请求之间“存活”,您将获得与将值存储在页面的视图状态中相同的效果。

    【讨论】:

      【解决方案3】:

      我通常会使用查询字符串来处理这类事情,主要是为了使页面可以添加书签(如果您使用 sessionstate 或表单值,则无法为页面添加书签)。正如您在对 Fredrik 的回答的评论中所说的那样,这确实意味着用户可以操纵 URL 来查看不同的客户,但如果您正在检查是否允许用户访问指定的客户,这不是问题。

      如果您真的不想使用查询字符串,我会使用隐藏的表单字段来传递 ID。不过,您仍然应该检查是否允许用户看到客户,而不是盲目地假设一切都很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-01
        • 1970-01-01
        相关资源
        最近更新 更多