在不使用javascript的情况下检查表单数据中的更改

在不使用javascript的情况下检查表单数据中的更改,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,我目前使用下面的javascript来检测表单中的更改 form.addEventListener("input", function () { ChangesMade = true; console.log("Change"); }); 我现在需要包括是否在对控制器的调用中进行了更改,这意味着该值不能再存储在javascript中,因为这是客户端 将表单数据发送到服务器 在服务器端,从数据库加载当前数据 比较并测试更改 将表单数据发送到服务器 在服务器

我目前使用下面的javascript来检测表单中的更改

form.addEventListener("input", function () {
        ChangesMade = true;
        console.log("Change");
    });
我现在需要包括是否在对控制器的调用中进行了更改,这意味着该值不能再存储在javascript中,因为这是客户端

  • 将表单数据发送到服务器
  • 在服务器端,从数据库加载当前数据
  • 比较并测试更改
  • 将表单数据发送到服务器
  • 在服务器端,从数据库加载当前数据
  • 比较并测试更改

  • 你有几个选择

    1。使用模型的两个实例构建视图模型。一个是“原始”实例,一个是“更改”实例。将“原始”字段绑定到表单中的隐藏输入,并将“更改”字段绑定到正常表单元素

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

    但是请注意,如果用户愿意,他们仍然可以更改隐藏的输入。这不是一个安全的措施,但如果这里不考虑“安全性”,这可能是一个有效的措施

    2.保持视图和控制器的交互方式不变,但当数据发布到控制器时,您将使用该记录中的标识符从数据库中获取原始数据

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

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



    这是两个选项之间的折衷,其中一个选项满足系统的实际需要,但缺点可以接受。

    您有两个选项

    1。使用模型的两个实例构建视图模型。一个是“原始”实例,一个是“更改”实例。将“原始”字段绑定到表单中的隐藏输入,并将“更改”字段绑定到正常表单元素

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

    但是请注意,如果用户愿意,他们仍然可以更改隐藏的输入。这不是一个安全的措施,但如果这里不考虑“安全性”,这可能是一个有效的措施

    2.保持视图和控制器的交互方式不变,但当数据发布到控制器时,您将使用该记录中的标识符从数据库中获取原始数据

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

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



    这是两个选项之间的折衷,其中一个选项满足系统的实际需要,但有可接受的缺点。

    您是否需要知道实际模型内容在发布时是否已更改,或者是否有人键入文本框,而不管是否输入了新值。是否有人键入了文本字段,例如,如果有人将句子从“有2种…”更改为“有3种…”确定。。那将是模型内容的改变。下面的任何一个答案似乎都很好。您是否需要知道实际的模型内容在发布时是否已更改,或者是否有人在文本框中键入,而不管是否输入了新值。是否有人在文本字段中键入,例如,如果有人将句子从“There a 2 types of…”更改为“There a 3 types of…”确定。。那将是模型内容的改变。下面的任何一个答案似乎都很好。