在页面重新加载时,我想保留用户在点击提交时键入的值。
我担心视图状态对页面来说很麻烦,无论是带宽还是页面查看器下载页面的时间。我的字节很便宜:p
我的问题是不是使用服务器控件,而是我在页面上的表单做了一个自己和aspx推送
<input type="text" id="user_email" name="email" value="<%=Request.Form["email"] %>" />
这允许我不使用viewstate。以这种方式做事有什么潜在的缺点吗?我的目标始终是提供更轻松的页面和效率,即使它更有效。
提前致谢
答案 0 :(得分:1)
这可能是很多工作,如果你想做这个工作,它可能会在以后咬你。 我建议您在页面或控件的基础上禁用viewstate,否则我认为没有必要使用ASP.NET webform,您可能想尝试查看ASP.NET MVC。
答案 1 :(得分:0)
您可以使用发送到客户端的0字节ViewState数据来解决这个问题,只需要很少的工作并且不需要更改现有代码:在服务器的文件系统上存储ViewState。
在此处详细了解:https://msdn.microsoft.com/en-us/library/ms972976.aspx。
您不必全部阅读,向下滚动直到您到达指定视图状态的位置这一章。您需要做的就是继承页面中使用的Page类,覆盖某些与ViewState相关的方法以更改ViewState行为。示例代码在链接中。
<强>提示强>
您应该明确地将SSD存储用于此类ViewState。在Azure服务器上,D:Temp-驱动器针对此类用途进行了优化。
为了进一步提高性能,您可以实现一种主要使用System.Web.Caching而不是SSD的缓存机制。但只有在内存已满并且即将清除缓存时才写入SSD。在缓存API,使用缓存对象:了解有关缓存的更多信息:https://msdn.microsoft.com/en-us/library/aa478965.aspx
如果您选择使用缓存,则每当同一用户下次发布时,您还应从缓存中删除旧的ViewState。这将大大减少内存消耗,并且可能在大多数情况下消除对SSD写入的需求。
设置合理的时间来保持ViewState。在大多数类型的页面上,30分钟 - 1小时应该足够了。
请问我是否需要进一步的例子。 :)