上下文
我们的网络应用程序具有“创建员工”等功能。它显示三个页面(n中的1个),以允许用户在每个页面上输入相关信息。在第3页上,“保存”按钮允许用户保存员工。如果用户在第1页的字段中输入了错误的值(服务器只能验证某些内容)并且服务器报告错误,则默认行为是在页面1上显示错误消息,相关字段标记为红色。
问题陈述
以上一切正常,直到最近几次构建显示出破坏行为。在上面提到的场景中,出现错误时,显示页面2而不是页面1.其他所有工作正常,如错误消息正确,第1页上的字段标记为红色。
分析
我尝试在java脚本中查看分页逻辑,恢复到正在运行的版本更改。我还尝试了提议的解决方案here,here。我还清除了浏览器缓存并重新打开它。
没有任何效果。
然后我发现UI代码库的主要变化是AntiForgeryToken()的引入。我从页面和控制器中删除了它,一切都恢复了。我检查了AntiForgeryToken()是不是抛出异常。
问题
提前致谢。
答案 0 :(得分:0)
以防万一在Java Script / JQuery中帮助像我这样的新手。
Java Script中的分页逻辑根据通过JQuery的Index()方法计算的索引选择要显示的页面,并考虑表单元素的数量。
由于AntiForgeryToken()添加了一个隐藏的表单元素,因此索引被错误地计算为1而不是0(对于第1页)。这就是AntiForgeryToken()正在扮演的角色。
解决方法是将分页组标识符传递给Index()方法,这样它就不会考虑除属于分页的任何其他元素。
就是这样。
从这个问题中学习,在使用JQuery或任何其他JS库查找HTML元素时总是更具体。 JQuery确实提供了手段,但不幸的是,因为事情以前原作者没有利用Index()方法的力量。