【发布时间】:2011-09-01 20:52:10
【问题描述】:
我previously asked a question regarding this,得到了一个interesting answer,这让我在路上,很好地问了更多问题。因此,这是我了解 AJAX 帖子的内部工作原理以及相当烦人的 ValidateAntiForgeryTokenAttribute 的旅程中的下一个问题。
我有一个 _layout.cshtml,这是目前所有脚本文件所在的位置。我有一个登录页面,它呈现三个部分,一个用于 OpenID 登录,这只是一个普通的@using(Html.BeginForm()) {},一个用于本地登录,另一个用于基本注册。登录部分和注册部分都使用 ViewModels 和 Ajax.BeginForm
请注意,我正在使用 @using Ajax.BeginForm 并获取 data-ajax-update attr 以在成功时更新元素
_layout.cshtml 中的脚本:
$(document).ready(function () {
$('input[type=submit]').live("click", function (event) {
event.preventDefault();
var _allFormData = $(this).parents().find('form');
var _currentForm = $(this).closest('form');
var _updateElement = $(_currentForm).attr("data-ajax-update");
$.ajax({
type: "POST",
url: $(_currentForm).attr('action'),
data: $(_allFormData).serialize(),
success: function (data) {
$(_updateElement).html(data);
}
});
return true;
});
});
_layout.cshtml 中的表单元素
<form id="__AjaxAntiForgeryForm" action="#" method="post">
<@Html.AntiForgeryToken()>
</form>
控制器中的动作方法:
public ActionResult RegisterMember(
RegisterMemberViewModel registerMemberViewModel)
{
// Process some stuff
return PartialView("_Register");
}
为什么这有效,神奇的是AntiForgeryToken 被包含在我的所有帖子中。我没有抓住它并附加它,我没有用它做任何事情,它真的就在那里。有人可以解释一下为什么会这样。我不喜欢意外的解决方案,它们通常会在以后中断。
【问题讨论】:
-
@casper,感谢我上一篇文章中的相关链接太酷了。
-
我喜欢问“为什么这样有效”的问题,因为这样我就不必挖掘答案来找到有效的代码!为您提供所有代码的道具
标签: jquery asp.net-mvc-3 antiforgerytoken