MVC 5 @Html.AntiForgeryToken() 生成具有空值的 html 标签

MVC 5 @Html.AntiForgeryToken() generating html tag with empty value

标题很漂亮self-explanatory。助手 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开始就一直存在,所以即使调试了客户端代码,为什么它只发生在这个项目中仍然是一个谜。无论如何,感谢您的反馈。

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

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

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

而且我确实研究了文件排序,jQuery.validateglobalize,所有这些,顺便说一句。再见,全球化。

希望这对以后可能遇到同样问题的人有所参考。