【问题标题】:Html.AntiForgeryToken() breaking pagination behaviorHtml.AntiForgeryToken() 破坏分页行为
【发布时间】:2013-12-04 05:36:07
【问题描述】:

上下文

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

问题陈述

在最近的几个构建显示出破坏行为之前,上述所有功能都可以正常工作。在上述场景中,出现错误时,显示第 2 页而不是第 1 页。其他一切正常,如错误消息正确,第 1 页上的字段标记为红色。

分析

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

没有任何效果。

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

问题

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

提前致谢。

【问题讨论】:

  • 这个问题好像太本地化了。将您的问题重新表述为通用的。
  • @Ramesh,对不起,我没有得到你。我可以要求您更具体地说明您需要了解问题的详细信息吗?如果这有助于您理解问题,我很乐意添加更多详细信息。
  • 这个问题对访问这个网站的人没有帮助。你没有分享你的分页逻辑。您不确定根本原因。如果在一般情况下,我们可以提供帮助。但在这种情况下,它非常适合您的逻辑和代码。
  • @Ramesh - 是的,你是对的,我不确定根本原因,这就是为什么我在这里发帖希望有人能指出我找到根本原因并最终找到正确解决方案的正确方向。您是否怀疑分页逻辑(这是一大段代码)可能是罪魁祸首?那为什么删除 AntoForgeryToken 会让这个问题消失呢?
  • 如果您的分页逻辑位于客户端,则应该触发它移动到第 2 页。我建议您在开发人员工具(例如 chrome's / firebug)中放置一个断点,看看谁在调用脚本。除非您的实现做了一些特殊的事情,否则 mvc 的防伪验证与您的自定义分页逻辑之间没有关系。我上面提到的方法可能会有所帮助。

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


【解决方案1】:

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

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

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

解决方案是将分页组标识符传递给 Index() 方法,因此它不考虑仅属于分页的任何其他元素。

就是这样。

从这个问题中学习,在使用 JQuery 或任何其他 JS 库查找 HTML 元素时始终更加具体。 JQuery 确实提供了方法,但不幸的是,由于之前的工作正常,原作者没有利用 Index() 方法的强大功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多