ASP.NET View State 是 ASP.NET 的一个强大功能,它提供了客户端状态管理机制。 它有助于在客户端请求的完整往返之间保留页面和控件值。 这为状态提供了通过 HTTP 等无状态协议的完整编程能力。
ASP.NET View State 作为编码的 Base64 字符串存储在页面上的隐藏字段中,作为发送到客户端的每个响应的一部分,并且还作为回发的一部分由客户端返回到服务器。
<input id = "__VIEWSTATE"
type = "hidden"
name = "__VIEWSTATE"
value = "/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kFgQCAQ9kFgICBQ9kFgJmD2QWAgIBD
xYCHhNQcm2aW91c0NvbnRyb2xNb2RlCymIAU1pY3Jvc29mdC5TaGFyZVBvaW50Lld
lYkNvbnRyb2xzLlNQQ29udHJbE1vZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD
2…=="/>
虽然很有用, ASP.NET View State 确实带来了一些您需要了解和解决的问题。 它们将在下面讨论。
您可以解决的一种方法 ASP.NET View State 问题是通过存储实际 ASP.NET View State 在 Web 服务器上,并向浏览器发送一个唯一的令牌(或 ID)来代替它,以便浏览器下次可以将此令牌发送回 Web 服务器。 然后,Web 服务器使用此令牌找到正确的 ASP.NET View State 在它的商店里。 下面是一个使用令牌代替的示例 ASP.NET View State.
<input type = "hidden"
name = "__VIEWSTATE"
id = "__VIEWSTATE"
value = "vs:cf8c8d3927ad4c1a84da7f891bb89185" />
尽管 ASP.NET View State 可以存储在 Web 服务器上,但当您的 ASP.NET 应用程序在负载平衡的 Web 场中运行时,它并不理想,因为下一个 HTTP 请求可能会到达另一个 Web 服务器。 因此,您必须存储 ASP.NET View State 在可从所有 Web 服务器访问的共享存储中。
最好的存放地点 ASP.NET View State 在服务器上 分布式缓存. 这样,您不仅可以为所有 Web 服务器拥有一个公共存储,而且您还可以拥有一个极其 快速且可扩展的内存存储 与 SQL Server 数据库或其他存储选项相比。
NCache 是一个非常快速且可扩展的分布式缓存,适用于 .NET/.NET Core、Java 和 Node.js。 它还可以让您存储 ASP.NET View State 来解决上述问题。
配置 ASP.NET View State 你需要安装 AspNet.ViewState。NCache NuGet软件包 作为先决条件。 然后你需要 配置 App_browser 文件 NCache 插入页面适配器和 配置 web.config 文件 在您的应用程序中注册视图状态的配置部分并指定已注册配置部分的设置。 请参阅 NCache ASP.NET View State 文档 用于逐步配置。
如果相同的缓存用于视图状态缓存和其他数据,您可以 获取视图状态数据 通过使用 NC_ASP.net_viewstate_data 标记为:
Hashtable allViewStateData = cache.GetByTag(new Tag("NC_ASP.net_viewstate_data"));
通过缓存您的 ASP.NET View State in NCache.
NCache 为您提供丰富的缓存和管理功能 ASP.NET View State. 下面是它们的列表。
如您所见, NCache 允许您缓存 ASP.NET View State 在服务器上优化您的 ASP.NET 性能。 此外, NCache 为您提供一组丰富的功能来管理您的 ASP.NET View State 在缓存中更有效。 这使您可以开发复杂的应用程序并使用这些功能来处理各种场景。