【问题标题】:MVC 5 @Html.AntiForgeryToken() generating html tag with empty valueMVC 5 @Html.AntiForgeryToken() 生成具有空值的 html 标记
【发布时间】:2018-01-04 15:48:36
【问题描述】:

标题是不言自明的。辅助 Razor 标记基本上是按照应有的方式生成令牌 cookie,但不是正确的隐藏标记。 已经检查过语法,表单没有使用 AJAX,而且 cookie 显然是正确的,所以...

我宁愿冒险将这个问题标记为重复问题,也不愿花费数周时间在大海捞针上解决问题。

查看:

@model model
@{
    ViewBag.Title = "Title";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    //content
}

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ControllerName([Bind(Include = "fields")] Class objectClass)
{
    //content
}

标签:

<input name="__RequestVerificationToken" type="hidden" value="">

饼干:

name,value,domain,path,expires,httpOnly,secure
__RequestVerificationToken,5iRF4KpqPUPqnqRnlt74YrS99mOXW7Y-WcjKFOz3GmH3DmtuQPEHHAjm8vqZg9Z7P7F3rymZ2zojemQwJp0meq2etANdI5rm9n0RT7jjqCE1,localhost,/,Sessão,true,false

更新 1:

原来它是因为 jQuery 而发生的。我怀疑这是由于与安装的版本不兼容,3.1.1,当前最新的稳定版本。它在强制删除元素属性的第 7958-7961 行周围具有以下条件:

// If set returns undefined, fall back to normal setting
if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
    this.value = val;
}

但最后我发现这种情况从 v1 开始就一直存在,所以即使调试了客户端代码,为什么它只发生在这个项目中仍然是个谜。无论如何,感谢您的反馈。

【问题讨论】:

  • "不是正确的隐藏标签" .. 你的意思是标签与 cookie 不匹配,还是根本没有生成标签?
  • 页面加载时是否有任何客户端脚本在此页面上运行?正确是指生成 HTML 时标签显示的名称正确吗?
  • 是的,标签生成正确,但“value”参数为空。

标签: c# cookies asp.net-mvc-5 antiforgerytoken


【解决方案1】:

起初我怀疑是 jQuery 3.1.1 导致了它,但我没有注意到我已经停止使用我的 Globalize.js 包。 Globalize 基于它的前提看起来像是一个很棒的验证插件,但是它有太多的依赖项,我当时没有,直到今天还找不到所有的,即使检查了我能找到的每个官方频道.

他们自己的依赖指南站点(查看完整版本):https://johnnyreilly.github.io/globalize-so-what-cha-want/

最终破坏/删除我隐藏的 AntiForgeryToken 输入的是同时使用 jQuery.validate 和 Globalize 时的某种冲突。可能是因为缺少依赖项,但我想我永远不会知道,因为到目前为止我还没有真正看到同时使用两者(具有所有功能的全球化)的工作系统。

我确实查看了文件排序,jQuery.validateglobalize,所有这些,顺便说一句。久违了,全球化。

希望这可以作为将来可能偶然发现相同问题的任何人的参考。

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多