剃刀编辑表单 - 如果值已更改,是否存在仅绑定属性的属性或其他方便方法?

时间:2014-02-22 05:23:18

标签: jquery asp.net-mvc entity-framework razor custom-attributes

我的一个对象的string ImportantName必须是唯一的,并且通常用于网址路由,即http://www.mywebsite.com/objects/{ImportantName}

我可以允许(并且需要允许)对ImportantName的更改,但是当我这样做时,我需要执行额外的服务器端验证,并在名称更改的情况下重定向到不同的URL。

当然我可以添加一些jQuery来检测值的变化,或者比较服务器上的旧/新名称,但是必须有更好的方法,对吧?

以下任何一种都适合我:

  1. 如果ImportantName已根据提供的模型绑定
  2. 从初始值更改,则仅发送ImportantName
  3. 添加一个布尔字段以检测OldImportantName是否已更改,并仅将该值发送给服务。
  4. 现在我正在解决此问题,方法是将NewImportantNameFormModel添加到{{1}}并在发布后在服务器上进行比较。

1 个答案:

答案 0 :(得分:0)

  
      
  • 如果已从基于提供的模型绑定
  • 的初始值更改,则仅发送ImportantName   
  • 添加一个布尔字段以检测ImportantName是否已更改,并仅将值发送给服务。
  •   

如果要实现上述任一选项,则只能使用JQuery在客户端完成它们。我是这样说的,因为FORM已经在客户端浏览器上呈现,并且应该在客户端通过更改DOM来管理/排除POST操作中的任何属性(如果你不想使用AJAX,但是如果你决定使用AJAX,那么你只能使用JQuery从客户端POST你感兴趣的属性。实际上,观察模型属性的任何更改也需要使用JQuery在客户端完成。

所以在这种情况下,我更愿意解决这个问题,正是你现在如何解决它,但几乎没有变化。我没有向formModel包含OLD / NEW值,而是我只有一个属性OLD,我将使用JQuery OnChange识别对它的更改。然后采取必要的行动。如果您不想使用JQuery,那么在FORM POST上,您可以使用服务器端的ActionFilter来检查模型中的更改(您已经编写了一些代码来检查模型中的更改,AFAIK在HTTP世界中没有默认机制)识别属性更改并进行必要的服务器重定向。

或者,您可以使用KnockoutJSAngularJs之类的JavaScript框架,并获得Observable数组或集合,可用于在客户端轻松检测属性更改。通过这些框架采取必要的行动和POST只需要和感兴趣的参数。