Jquery 自动保存和重新填充大型ASP.NET表单的性能良好的方法

Jquery 自动保存和重新填充大型ASP.NET表单的性能良好的方法,jquery,asp.net,updatepanel,msmq,autosave,Jquery,Asp.net,Updatepanel,Msmq,Autosave,我的问题是关于在ASP.NET 4.0 WebForms应用程序中实现自动保存的高性能方法 我读了很多关于使用各种jQuery autosave插件的文章,但它们似乎都最适合用于最小的输入元素。我还没有找到一个解决方案,当用户返回到ASP.NET表单时,它会再次填充该表单。 我有一个包含很多元素的FormView,还有一个嵌套的listview和FormView。使用LinqDataSource填充FormView及其子级 Web服务器是IIS 7。DB是通过Linq到SQL的SQL Serve

我的问题是关于在ASP.NET 4.0 WebForms应用程序中实现自动保存的高性能方法

我读了很多关于使用各种jQuery autosave插件的文章,但它们似乎都最适合用于最小的输入元素。我还没有找到一个解决方案,当用户返回到ASP.NET表单时,它会再次填充该表单。

我有一个包含很多元素的FormView,还有一个嵌套的listview和FormView。使用LinqDataSource填充FormView及其子级

Web服务器是IIS 7。DB是通过Linq到SQL的SQL Server,我可以访问MSMQ或任何其他需要的服务器组件

我已经使用UpdatePanel实现了自动保存,其中表单元素设置为AutoPostBack,并使用一些自定义javascript强制异步请求按顺序进行。这是为了避免LINQtoSQL中的并发错误。每次UpdatePanel异步回发都会将整个表单保存到SQL Server中的草稿表中。这不是很优雅,但它确实工作-缓慢

问题是往返太慢了。这会导致保存期间所做的表单更改不被保存,并且如果用户同时滚动了表单,则表单会跳回保存的元素

所以我现在想我需要:

  • 保持相同的方法,从表单中填充linq实体并将其保存在MSMQ中。然后,当用户提交表单时(或者在会话结束时,或者下次再次登录时),我会将其拉出并保存;或
  • 使用类似的方法将序列化的表单数据保存到MSMQ。这将非常快,但问题是,当用户在后续会话中返回到ASP.NET表单时,我不确定如何将数据放回该表单中
  • 我还考虑过在每一篇文章上只保存“发送”表单输入值。我可以在字典中这样做,并在MSMQ中维护字典

    顺便说一句,我不能使用缓存或会话,因为即使用户关闭浏览器,我也必须确保表单数据被保留。所以我需要更强壮的东西

    对您的意见非常感兴趣-非常感谢所有帮助


    干杯。

    在之前的工作中,有一个带有隐藏按钮或计时器的控制面板工作得很好。用户在自动保存期间/之后添加更多内容是正常的。这就是为什么它是自动保存而不是最终保存。这些更改将保存在下次自动保存中

    在页面中为整个表单使用普通的一个UpdatePanel(不在它里面的控件,在它里面只有一个计时器控件或按钮控件),不需要我对顺序JS做任何事情。我想你经常做自动保存,也许吧?30-120秒对于大的形状应该是合适的

    通常,你会在MSMQ或DB或其他任何地方有一些东西,如果用户来处理表单时存在,请从表单中填写,如果没有,则正常工作


    jQuery插件似乎也很有趣。

    在以前的工作中,有一个带有隐藏按钮或计时器的控制面板,效果很好。用户在自动保存期间/之后添加更多内容是正常的。这就是为什么它是自动保存而不是最终保存。这些更改将保存在下次自动保存中

    在页面中为整个表单使用普通的一个UpdatePanel(不在它里面的控件,在它里面只有一个计时器控件或按钮控件),不需要我对顺序JS做任何事情。我想你经常做自动保存,也许吧?30-120秒对于大的形状应该是合适的

    通常,你会在MSMQ或DB或其他任何地方有一些东西,如果用户来处理表单时存在,请从表单中填写,如果没有,则正常工作


    jQuery插件似乎也很有趣。

    谢谢。是的,自动保存可以每隔几秒钟发生一次,因为它是在每个输入元素上触发的(这样就不会丢失任何东西。)也许这有点雄心勃勃!:)但我决心解决它。我认为这对这个问题来说太难了。即使你解决了它,我打赌也没有必要。如果你觉得这是个问题,那么就进行优化。无论如何,如果对于每个字段,最好是为所有发送表单标识符(可能包括特定于草稿或用户等)、字段标识符和值的更改事件等创建jquery处理程序,指向Web服务或仅更新此字段的内容。如果您通过LINQ将整个实体加载到SQL,您仍然需要顺序,而如果您仅使用SQL更新一个字段,则可能不需要顺序。我听到了-我正在与一位真正想要此功能的困难项目负责人打交道。在说服他们放弃之前,我至少要试着去做!同意jquery的onchange方法-但不确定如何将字段ID与Linq实体匹配。必须在属性名称后命名输入字段。然后使用jQuery获取客户端ID中最后一个“\u1”之后的部分,然后发送到webservice,webservice可以手动构造SQL,也可以使用类似于中“更新”部分的技术(它使用表达式树并从中提取属性名称,您可以删除该部分并直接使用属性名称,它在实体属性上循环,直到得到具有相同属性名称的属性并通过反射进行设置)谢谢。是的,自动保存可以每隔几秒钟发生一次,因为它在每个输入元素上被触发(以免丢失任何东西)。也许这有点雄心勃勃!:)但我决心解决它。我认为这个问题太难了。即使你解决了它,我打赌也没有必要。如果你觉得这是个问题,那么就进行优化。无论如何,如果对于每个字段,最好是为所有更改事件等创建jquery处理程序,将表单标识符(可能包括特定于草稿或用户等)、字段标识符和值发送到webservice或somet