【发布时间】:2014-01-15 07:09:24
【问题描述】:
我有一个 ASP.NET MVC 4 表单,其中有用于显示和隐藏一些 HTML 元素的复选框。在访问表单页面时,RequestVerificationToken 值被正确地创建为隐藏字段。默认情况下,某些 HTML 元素是隐藏的。
然后在我取消勾选复选框(隐藏那些 HTML 元素)后,我勾选一个复选框以显示一些 HTML 元素,RequestVerificationToken 值消失。
所以当我点击创建按钮提交表单时,出现如下错误:
所需的防伪表单字段“__RequestVerificationToken”不存在
如果我不取消选中该复选框,则 RequestVerificationToken 的值存在并且表单已成功提交。
使用 jQuery/javascript 隐藏 HTML 元素。
为什么会这样?我该如何解决这个问题?在线研究错误仅建议添加如下属性。
我已经在 Create action 方法中添加了属性,但 GET 方法中没有:
// POST: /Document/Create
[HttpPost]
[ValidateAntiForgeryToken]
...
在创建表单页面我还添加了:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
...
这里是显示和隐藏元素的 Javascript:
$('div.section .input_control').change(function () {
var $target = $(this).closest('div').find('.showSection');
if (this.checked) {
$target.show();
} else {
if (confirm("Are you sure you want to exclude this section?") == true) {
$target.hide();
jQuery(':hidden').val('');
} else {
$(this).prop("checked", true);
}
}
});
【问题讨论】:
-
该元素是真的隐藏了还是被禁用了? stackoverflow.com/questions/1355728/…
-
我用复选框隐藏的元素是div。 div 有 style="display: none" 隐藏和 style="" 显示元素。这不对吗?这如何删除请求令牌的值?
-
你能展示你的javascript吗?
-
好的,我添加了 JS,不知道如何在此代码编辑中正确添加缩进。
-
啊啊啊我明白了!就是这一行: jQuery(':hidden').val('');不是吗??我试图在隐藏时删除表单字段的值以重置它们。什么是替代方案?因为它也在删除 RequestVerificationToken
标签: javascript jquery html asp.net-mvc antiforgerytoken