javascript - 不使用 javascript 检查表单数据的更改

标签 javascript c# asp.net-mvc

我目前有以下 JavaScript 来检测表单中的更改。

form.addEventListener("input", function () {
        ChangesMade = true;
        console.log("Change");
    });

我现在需要包括在对 Controller 的调用中是否进行了更改,这意味着该值不能再存储在 JavaScript 中,因为这是客户端。

最佳答案

您有几个选择...

1. 使用模型的两个实例构建 View 模型。一个是“原始”实例,一个是“更改”实例。将“原始”字段绑定(bind)到表单中的隐藏输入,并将“更改”字段绑定(bind)到普通表单元素。

然后,当表单发布到服务器时, Controller 操作的输入将有两个实例进行比较。如果“更改”值与“原始”值不同,则用户更改了某些内容。

请注意,但是用户仍然可以更改隐藏的输入(如果他们愿意)。这不是一种安全措施,但如果“安全”不是这里的问题,则可能是一种有效的措施。

2. 保持 View 和 Controller 交互不变,但是当数据发布到 Controller 时,您将使用该记录中的标识符从数据库中获取原始数据。

使用发布的模型和数据库获取的模型,比较两者。如果值不同,则用户更改了某些内容。

请注意但是,这不包括竞争条件。由于此模型最初是向用户显示的,因此另一个用户可能更改了数据库值。您可以通过添加数据更改时间的时间戳来解决此问题,但这可能不足以告诉您更改了哪些数据,除非您保留旧记录的审核副本。其复杂性迅速升级。

<小时/>

这是两种选择之间的权衡,其中一种可以满足系统的实际需求,但缺点可以接受。

关于javascript - 不使用 javascript 检查表单数据的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47675911/

相关文章:

asp.net-mvc - .NET MVC Ajax 表单 - 如何隐藏它?

c# - NLog 在 Release模式下不工作

c# - 无法使用实例引用访问成员 'string.Format(string, params object[])';用类型名称限定它

将 html 移动到父站点后,Javascript 停止工作

javascript - 在 Firefox 和 ie/edge 上使用 openlayers 3 未加载 map

javascript - 有没有办法检测用户是否在 beforeunload 事件中按下了 "Stay on page"或 "Leave page"?

c# - 带索引的 Lambda ForEach

c# - 如何使用 C#6 "Using static"功能?

javascript - 如何在angularjs中的选择选项中使用多选将json数据显示为optgroup

C# "Extra Space"添加到动态添加面板