在我的网络应用程序中,我在页面上有许多自定义网格。我希望用户能够编辑每个网格中的数据,然后在流程结束时按一次保存以提交更改。
所以我需要一些临时的东西才能在他们被投入之前坚持他们的变化。网格将使用AJAX / Javascript,以便在编辑数据时不强制刷新整页
我可以想到以下存储临时数据的选项
我最不习惯的选项是ViewState选项,因为我已经读过,这是在ASP.NET 4.0中逐步淘汰的,我不确定你是否可以从AJAX页面方法访问ViewState。
我对人们对上述选项的看法感兴趣,并且如果ViewState应该用于存储与开箱即用控件无关的数据。
答案 0 :(得分:4)
ASP.Net 4.0没有逐步淘汰ViewState(它对于Web表单的工作方式非常重要!),它只是稍微改变了ViewState默认工作的方式。你可以read about it here。
如果要手动跟踪数据,则最佳选项是会话。但ViewState旨在自动为您保存这些临时更改。
答案 1 :(得分:3)
ViewState 不被逐步淘汰,永远不会。
但是,你不能用静态页面方法访问它。
我建议您将数据存储在会话中。
答案 2 :(得分:1)
从服务器端技术来看,会话/缓存是您最好的选择; session是特定于用户的,而缓存是特定于应用程序的,但您可以使用附加了用户ID的键将项目存储在缓存中,以使其成为用户特定的。
在客户端,您必须使用隐藏字段来存储数据,因为JavaScript不了解会话/缓存,并且AJAX请求不一定能访问某些Web资源。您可以尝试通过Web请求中的HttpContext.Current访问这些资源,但有关该页面的信息将无法在Web服务调用或PageMethods Web服务调用中使用。
答案 3 :(得分:0)
如前所述,将它存储在会话中,但确保在完成后清理并仅存储您真正需要存储的内容,即,不要只是在会话中转储一堆内容,因为它很容易。
我们在我们的应用程序中使用相当多的会话,但请务必在我们自己之后进行清理,并且只保留我们真正需要的内容。如果您将会话用作转储地,则可能会遇到性能问题。
答案 4 :(得分:0)
我正在使用ViewState,它运行得很好。会话将导致大量内存消耗,并且它不是我的首选解决方案,而ViewState本质上只是一个隐藏字段,因此只要页面回发或回调就可以读取它。
我的正常过程是: - 页面加载:将数据源绑定到网格,将数据源保存到ViewState - 网格提交: +更新:获取更新密钥,提取数据源中的数据项并使用最新值进行更新 + Insert:在数据源中创建一个新数据项 +删除:使用自定义标记标记数据项已删除 然后重新绑定网格。 - 页面保存:从ViewState获取数据源,并使用您的标志将其批量插入/更新/删除到数据库中