【问题标题】:How to identify model is changed before submitting to server?在提交到服务器之前如何识别模型已更改?
【发布时间】:2015-09-15 07:00:17
【问题描述】:

我们有 MVC 应用程序。如果用户更改页面上的任何数据并尝试离开页面而不保存,我们有一个要求,那么我们需要显示一些“你确定吗?”一种消息。

这里的挑战是我如何识别数据已更改?我们的典型设计模式如下

public class MyController:Controller
{
   public ActionResult Index()
   {
      var model = LoadModelFromDB();
      return View(model);
   }
}

然后我们使用 Html 辅助扩展方法将模型绑定到视图。
在客户端我如何在将数据提交到服务器之前识别模型是否脏?

【问题讨论】:

  • 你需要javascript。一种选择是将每个控件的defaultValue 属性(defaultChecked 用于复选框)与value 属性进行比较

标签: jquery asp.net-mvc


【解决方案1】:

这是一个完全发生在客户端的操作——它与 MVC 中的模型无关。

您可以通过使用 JavaScript 将事件处理程序附加到 onbeforeunload event 并提供一些额外的逻辑来测试表单元素的更改来完成此操作。

我已经为一个开源项目做出了贡献,它可以帮助修复浏览器之间的差异,以及监控表单元素的变化,允许插入不同的对话框框架,并将其包装成一个名为 jQuery 的插件Dirty Forms.

【讨论】:

  • 如果我在准备好的文档上序列化表单并将值存储在变量 & 中,然后在导航离开之前再次序列化它,并比较两个序列化的值,那会奏效吗?
  • 我没有尝试过,但它可能会起作用。不过,如果您在页面上使用 AJAX 动态更改表单属性,我怀疑可能会出现问题。
  • 是的,每次 DOM 更改时我都必须进行序列化和存储
猜你喜欢
  • 2020-03-13
  • 2019-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多