C# 保存不断变化的数据的最佳方法

C# 保存不断变化的数据的最佳方法,c#,jquery,sql-server,asp.net-mvc,C#,Jquery,Sql Server,Asp.net Mvc,我有一个由许多行组成的web应用程序。每行都有一个带有“0”的标签和一个按钮。按下按钮,标签的增量为1 应用程序仅以一行开始,但用户可以添加任意多行 标签中的所有值都需要保留。因此,如果登录的用户添加了10行,并在每行上按了几次按钮,那么下次他们回来时,所有的值都应该保持不变。这就是问题所在,因为我不确定保存这些值的最有效方法 我的第一个想法是在单击每个按钮时进行AJAX调用,但是如果用户对按钮进行垃圾处理以获得某个值,那么我会进行许多多余的调用。我还可以每隔x秒保存所有行,但如果用户更改一行,

我有一个由许多行组成的web应用程序。每行都有一个带有“0”的标签和一个按钮。按下按钮,标签的增量为1

应用程序仅以一行开始,但用户可以添加任意多行

标签中的所有值都需要保留。因此,如果登录的用户添加了10行,并在每行上按了几次按钮,那么下次他们回来时,所有的值都应该保持不变。这就是问题所在,因为我不确定保存这些值的最有效方法

我的第一个想法是在单击每个按钮时进行AJAX调用,但是如果用户对按钮进行垃圾处理以获得某个值,那么我会进行许多多余的调用。我还可以每隔x秒保存所有行,但如果用户更改一行,然后在下一次保存触发之前离开,则可能会导致数据持久性不完整。我也想过卸载时保存,但这不会吸引那些只关闭浏览器或标签的用户


我正在使用MVC、Jquery、C#和MSSQL。我的网站和数据库位于同一台服务器上。

我不会禁用该按钮,因为它可能会损害可用性-我不知道您正在使用的具体环境,但如果您担心按钮垃圾邮件,那么这可能对用户来说是一个有效的方案。服务调用可能需要一些时间,具体取决于底层网络以及客户端和服务器之间的距离。从用户的角度来看,如果输入可以在10到100毫秒内发送,应用程序的反应将快速而平稳。如果用户每次按下按钮都执行服务呼叫,这一目标可能会受到损害

避免这种情况的一种常见模式是使用计时器:当用户按下按钮时,计时器启动,运行时间可能为400到500毫秒:

  • 如果用户在计时器到达间隔结束之前提供新输入,则应重新启动计时器
  • 如果计时器确实发出了间隔结束的信号,而用户没有进一步的输入,那么您可以省去拨打服务电话

我在自己的解决方案中使用了这种模式。我从杰夫·约翰逊(Jeff Johnson)的优秀著作中获得了时间值。

我相信,如果你发送垃圾邮件按钮,它将取消以前的请求,因此只要你发送总数而不是增加总数,就可以了。将数据置于会话状态并在会话结束时处理如何?@drneel如果他们缓慢地发送垃圾邮件会怎么样(每秒1次),这将使ajax调用有足够的时间调用我的服务器并启动数据库调用。不要想得太多,它应该在每次单击按钮时保存,垃圾邮件问题就是您需要解决的问题,例如,在您得到响应之前禁用按钮如果用户必须单击按钮x次才能使行包含值“x”,那么我认为这可能是一个UI设计问题。你能给用户一种方式来输入他们想要的值(或行、行内计数等),而不是让他们“垃圾邮件”按钮吗?我喜欢这个选项。可能还想添加一些内容,说明:如果x个操作没有保存,或者自上次保存以来已经过了一些总时间段(超级垃圾邮件用户将点击5000次),然后继续并在最大间隔触发保存。