我的问题是关于在 ASP.NET 4.0 WebForms 应用程序中实现自动保存的高性能方法。
我已经阅读了很多有关使用各种 jQuery 自动保存插件的内容,但它们似乎都最适合用于最小的输入元素。而且我还没有找到一种解决方案,可以在用户返回表单时再次填充 ASP.NET 表单。
我有一个包含很多元素的 FormView,以及一个嵌套的 ListView 和表单 View 。使用 LinqDataSource 填充 FormView 及其子项。
Web 服务器是 IIS 7。数据库是通过 Linq to SQL 的 SQL Server,我可以访问 MSMQ 或所需的任何其他服务器组件。
我已经使用 UpdatePanel 实现了自动保存,并将表单元素设置为 AutoPostBack,并使用一些自定义 JavaScript 来强制异步请求按顺序进行。这是为了避免 Linq to SQL 中的并发错误。每个 UpdatePanel 异步回发都会将整个表单保存到 SQL Server 中的草稿表中。它不是很优雅,但确实有效 - 慢慢地!
问题是往返太慢。这会导致在保存期间所做的表单更改不会被保存,并且如果用户同时滚动,表单也会跳回到已保存的元素。
所以我现在认为我需要:
- 保持相同的方法,从表单填充 linq 实体并将其保存在 MSMQ 中。然后,当用户提交表单时(或者可能在 session 结束时,或者当他们下次再次登录时),我会将其拉出并保留它;或
- 使用类似 https://github.com/nervetattoo/jquery-autosave/ 的内容并将序列化的表单数据保存到MSMQ。这会非常快,但问题是当用户在后续 session 中返回表单时,我不确定如何将数据放回到 ASP.NET 表单中。
我还考虑过尝试在每次回发时仅保存“发送”表单输入值。我可以在字典中执行此操作并在 MSMQ 中维护字典。
顺便说一句,我无法使用缓存或 session ,因为即使用户关闭浏览器,我也必须确保保留表单数据。所以我需要更强大的东西。
对您的意见非常感兴趣 - 非常感谢所有帮助!
干杯..
最佳答案
在之前的工作中,内部带有隐藏按钮或计时器的控制面板效果很好。用户在自动保存时/之后添加更多内容是正常的。这就是为什么它是自动保存而不是最终的事情。这些更改将在下次自动保存时保存。
在整个表单的页面中使用普通的 UpdatePanel(控件不在其中,其中只有计时器控件或按钮控件),不需要我使用顺序 JS 等执行任何操作。我认为您可能“非常”经常进行自动保存?对于大型表格来说,30-120 秒应该没问题。
通常情况下,您在 MSMQ 或 DB 或其他任何地方都会有草稿,如果用户在表单上工作时存在,则从中填写,如果不存在,则正常工作。
jQuery 插件看起来也很有趣。
关于jquery - 自动保存和重新填充大型 ASP.NET 表单的性能良好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5148598/