【问题标题】:asp.net maintaining viewstate with getasp.net 使用 get 维护视图状态
【发布时间】:2011-03-11 06:25:30
【问题描述】:

在页面重新加载时,我想保留用户在点击提交时输入的值。

我担心视图状态对于页面来说会很麻烦,无论是在带宽方面还是页面查看者下载页面的时间方面。我的字节很便宜:p

我的问题不是使用服务器控件,而是让页面上的表单对自身和 aspx 放置进行访问

<input type="text" id="user_email" name="email" value="<%=Request.Form["email"] %>" />

这允许我不使用视图状态。以这种方式做事是否有任何潜在的缺点?我的目标始终是更轻的页面和效率,即使它需要更多的工作。

提前致谢

【问题讨论】:

  • 记住:不仅值存储在视图状态中!
  • 我同意 Adreas。请记住,ControlState 也存储在隐藏的 VIEWSTATE 字段中。使用 ASP.NET Web 表单时,我总是从自定义基类派生我的页面,这基本上消除了页面中的所有视图/控件状态(并禁用“回发”)。显然,JS 脚本仍然被引用,隐藏字段被渲染到页面,但它已经比普通的 web 表单好得多了。
  • 另一个输入:处理隐藏字段的视图状态和传输真的是您的瓶颈吗? ...否则我不会应付它!
  • 另一个输入:要了解存储在视图状态中的内容,请将 __VIEWSTATE 字段的内容复制到此 base64 解码器 (opinionatedgeek.com/dotnet/tools/base64decode) 并点击 decode safely as text

标签: c# asp.net postback viewstate


【解决方案1】:

这可能需要做很多工作,如果你想解决这个问题,它可能会在以后给你带来麻烦。 我建议您禁用页面或控件基础上的视图状态,否则我认为使用 ASP.NET 网络表单没有意义,您可能想尝试查看 ASP.NET MVC。

【讨论】:

  • +,没有什么比EnableViewState="false"更容易了!
  • 不一定。禁用视图状态不会禁用控制状态,它也会被放入隐藏字段。这篇博文简要解释了如何完全禁用视图和控制状态:bit.ly/ehGxGn
【解决方案2】:

您可以使用发送到客户端的 0 字节 ViewState 数据来解决这个问题,只需很少的工作并且不更改现有代码:将 ViewState 存储在服务器的文件系统上。

在此处了解更多信息:https://msdn.microsoft.com/en-us/library/ms972976.aspx

您不必通读,向下滚动直到到达指定在何处保持视图状态一章。您需要做的就是我们继承页面中使用的 Page 类,覆盖某些与 ViewState 相关的方法来更改 ViewState 行为。示例代码在链接中。

提示

  • 对于这种 ViewState,您绝对应该使用 SSD 存储。在 Azure 服务器上,D: Temp-drive 已针对此类用途进行了优化。

  • 为了进一步提高性能,您可以实现一种主要使用 System.Web.Caching 而不是 SSD 的缓存机制。但只有在内存已满且缓存即将被擦除时才写入 SSD。在缓存 API,使用缓存对象下阅读更多关于缓存的信息:https://msdn.microsoft.com/en-us/library/aa478965.aspx

  • 如果您选择使用缓存,您还应该在同一用户下次发布时从缓存中删除旧的 ViewState。这将显着减少内存消耗,并可能在大多数情况下消除对 SSD 写入的需求。

  • 设置合理的时间来保持 ViewState。在大多数类型的页面上,30 分钟 - 1 小时就足够了。

如果您需要更多示例,请询问我。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多