【问题标题】:I have a problem with ViewState我的 ViewState 有问题
【发布时间】:2011-06-19 13:16:31
【问题描述】:

我像这样使用视图状态:

public bool SearchClicked 
{ 
    get { return  Session["bool"]==null? false : (bool)Session["Bool"]; } 
    set { Session["bool"] = value; } 
}

在代码中,只要按下按钮,就会触发事件。

我设置了:

    SearchClicked=true;

每次回复我都会检查它是否真实:

 if (SearchClicked)
{
}

当我启动站点并且有回发时,该值设置为“true”。

确实,在我运行应用程序之前,我按下了几次将其设置为 true 的按钮。但是每次我运行应用程序时,应用程序实例都是新的。这是否意味着每次我运行应用程序时 ViewState 都会自行重置,并且不会像 Session(20 分钟)那样保存其状态?

【问题讨论】:

  • ViewState,在基本术语中,是一个以加密形式存储值的隐藏字段。因此,它将在同一页面上将数据从回发持久化到回发。但是,一旦您离开页面并返回,它就会被重置。没有像 Session 那样的超时。它们是两个完全不同的概念。
  • 是的,因为 ViewState 属性存储在页面中的隐藏表单字段中,当应用程序正在运行时,它将在页面生命周期内持久保存数据,并且会话状态在服务器端管理而在客户端,因此它们安静不同。

标签: c# asp.net viewstate


【解决方案1】:

在上面的代码中,您没有使用 ViewState 来存储 SearchClicked 值,而是使用 Session 来存储它。 ViewState 以隐藏值的形式保存在页面上,并被发送回服务器。这意味着视图状态存储在浏览器上,因此只要用户在页面上,它就会一直存在。会话信息存储在服务器上。用户会话最终会超时,但其他事情可能会导致会话重置,例如重新构建应用程序或编辑 web.config 文件。

要存储到 ViewState,请使用以下内容

public bool SearchClicked
{
get { return  ViewState["bool"] == null ? false : (bool)ViewState["bool"]; }
set { ViewState["bool"] = value; }
}

【讨论】:

  • + 用于调出存储机制差异。
【解决方案2】:

视图状态在回发时处理页面的“状态”,仅此而已。它实际上与应用程序无关;它的目的很简单。

我发现这篇文章对我早期的 .NET 学习很有帮助: Understanding ASP.NET View State (特别是“视图状态的作用”部分)

【讨论】:

  • 我昨天读过。持有字典时视图状态如何执行。有什么问题吗?
  • 在视图状态中存储字典不会有任何问题。请注意,在视图状态中存储大量数据会导致页面性能不佳。在决定在页面的视图状态中存储什么时,请考虑到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 2011-01-17
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多