Html.AntiForgeryToken()打破分页行为

时间:2013-11-20 09:44:21

标签: javascript jquery asp.net-mvc-4 antiforgerytoken

上下文

我们的网络应用程序具有“创建员工”等功能。它显示三个页面(n中的1个),以允许用户在每个页面上输入相关信息。在第3页上,“保存”按钮允许用户保存员工。如果用户在第1页的字段中输入了错误的值(服务器只能验证某些内容)并且服务器报告错误,则默认行为是在页面1上显示错误消息,相关字段标记为红色。

问题陈述

以上一切正常,直到最近几次构建显示出破坏行为。在上面提到的场景中,出现错误时,显示页面2而不是页面1.其他所有工作正常,如错误消息正确,第1页上的字段标记为红色。

分析

我尝试在java脚本中查看分页逻辑,恢复到正在运行的版本更改。我还尝试了提议的解决方案herehere。我还清除了浏览器缓存并重新打开它。

没有任何效果。

然后我发现UI代码库的主要变化是AntiForgeryToken()的引入。我从页面和控制器中删除了它,一切都恢复了。我检查了AntiForgeryToken()是不是抛出异常。

问题

  1. 我不确定AntiForgeryToken()是如何影响java脚本中的分页代码的?
  2. 我可以尝试更多地了解根本原因?
  3. 任何提议的解决方案,请记住,没有AntiForgeryToken()?
  4. 提前致谢。

1 个答案:

答案 0 :(得分:0)

以防万一在Java Script / JQuery中帮助像我这样的新手。

Java Script中的分页逻辑根据通过JQuery的Index()方法计算的索引选择要显示的页面,并考虑表单元素的数量。

由于AntiForgeryToken()添加了一个隐藏的表单元素,因此索引被错误地计算为1而不是0(对于第1页)。这就是AntiForgeryToken()正在扮演的角色。

解决方法是将分页组标识符传递给Index()方法,这样它就不会考虑除属于分页的任何其他元素。

就是这样。

从这个问题中学习,在使用JQuery或任何其他JS库查找HTML元素时总是更具体。 JQuery确实提供了手段,但不幸的是,因为事情以前原作者没有利用Index()方法的力量。