1

我有一个非常复杂的表格,我不想因为有人进入更新页面而进行所有数据库查询。

我如何知道表单内的内容是否已被修改?

我不使用 knockout.js,也不想实现它。

4

2 回答 2

2

你可以使用javascript。例如,一旦呈现表单,您可以计算校验和,然后在提交之前重新计算该校验和并比较 2 个值。然后你可以设置一个隐藏字段的值,这样当表单提交到服务器时,你就会知道是否有修改:

String.prototype.hashCode = function() {
    var hash = 0;
    if (this.length == 0) return hash;
    for (i = 0; i < this.length; i++) {
        char = this.charCodeAt(i);
        hash = ((hash<<5) - hash) + char;
        hash = hash & hash;
    }
    return hash;
};

$(function() {
    var $form = $('form');
    $form.data('checksum', $form.serialize().hashCode())
    $form.submit(function() {
        var initialChecksum = $(this).data('checksum');
        var currentChecksum = $(this).serialize();
        var isDirty = initialChecksum != currentChecksum;
        $('#isDirty').val(isDirty);
    });
});

并且您的视图模型可能有一个IsDirty布尔属性,您可以在处理表单提交的控制器操作中查询该属性。

于 2013-04-25T07:09:11.577 回答
0

也许有一些jQuery。将一些类分配给字段并触发更改事件并将更改的字段的名称放在某个隐藏字段中,然后您可以在服务器端拥有已更改的字段。

<input type="hidden" id="changedNames" name ="changedNames" />


$(function () {
    $('.observe').change(function (e) {
        var thisName = $(this).attr('name');
        $('#changedNames').val($('#changedNames').val() + thisName + " ");

    });
});
于 2013-04-25T07:19:32.583 回答