如何检查表单数据是否已被修改?

时间:2013-04-25 06:50:12

标签: asp.net-mvc-4

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

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

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

2 个答案:

答案 0 :(得分: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布尔属性,您可以在处理表单提交的控制器操作中进行查询。

答案 1 :(得分:0)

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

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


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

    });
});