MVC中的自动保存(ASP.NET)

7hi*_*4g0 10 javascript asp.net-mvc autosave asp.net-mvc-4

我正在实施一个Web系统来管理我公司的一些数据.我们正在使用MVC(更具体地说是ASP.NET MVC 4),我完全不熟悉它.

我遇到的问题是我们计划使用自动保存,就像GMail一样.我们计划使用排队的变更事件,偶尔通过ajax提交更改.首先,我会使用JavaScript,但不确定这是否是MVC的最佳方式.我遇到的另一个麻烦是用户输入的一些信息不是在表单内部,而是在表格中.页面的布局也有点稀疏,我不相信我可以将所有输入包装成单个表单,即使我应该这样做.

我的问题是:

  1. 如果我使用或不使用JavaScript,使用MVC实现自动保存的最佳方法是什么?
  2. JavaScript中是否有任何库或ASP.NET MVC中的一个功能来实现排队,还是我应该手动完成?
  3. 另外,我可以使用表单来包装表行吗?

注意:我已经看到了一些使用localstorage或其他客户端持久性的建议,但我需要的是服务器持久性,我们甚至没有页面上的保存按钮.

我在这里先向您的帮助表示感谢 ;)

kar*_*una 12

您可以form="myformid"向表单外部的元素添加属性以将其包含在表单中.我会data-dirty="false"在开头添加属性到所有元素,并附加更改事件,将更改元素的data-dirty属性更改为true.然后,您可以每30秒保存一次表格(获取data-change = true并传递给服务器的元素).保存后,每个元素的data-dirty再次变为false.使用jQuery自动保存的示例:

window.setInterval(function(){
    var dirtyElements = $('#myformid').find('[data-dirty=true]').add('[form=myformid][data-dirty=true]');
    if(dirtyElements.length > 0){
        var data = dirtyElements.serialize();
        $.post('saveurl', data, function(){
            dirtyElements.attr('data-dirty', false);
            alert('data saved successfully');
        });
    }
}, 30000); // 30 seconds
Run Code Online (Sandbox Code Playgroud)

将事件附加到表单的所有元素:

$(function(){
    var formElements = $('#myformid')
                           .find('input, select, textarea')
                           .add('[form=myformid]')
                           .not(':disabled')
                           .each(function(){
                                $(this).attr('data-dirty', false).change(function(){
                                    $(this).attr('data-dirty', true);
                                });
                           });
});
Run Code Online (Sandbox Code Playgroud)