我試圖在MVC5項目中使用AJAX調用,因爲網上有很多類似的例子,但每次出現錯誤時,即antiforgerytoken,500等等,我正在查看適當的AJAX調用方法與控制器行動方法,具有所有必要的屬性和發送模型數據從視圖到控制器行動。下面是我使用的方法:在MVC5中使用AJAX調用
查看:
@using (Html.BeginForm("Insert", "Account", FormMethod.Post, new { id = "frmRegister" }))
{
@Html.AntiForgeryToken()
//code omitted for brevity
}
<script>
AddAntiForgeryToken = function (data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
$('form').submit(function (event) {
event.preventDefault();
//var formdata = JSON.stringify(@Model); //NOT WORKING???
var formdata = new FormData($('#frmRegister').get(0));
//var token = $('[name=__RequestVerificationToken]').val(); //I also tried to use this instead of "AddAntiForgeryToken" method but I encounter another error
$.ajax({
type: "POST",
url: "/Account/Insert",
data: AddAntiForgeryToken({ model: formdata }),
//data: { data: formdata, __RequestVerificationToken: token },
//contentType: "application/json",
processData: false,
contentType: false,
datatype: "json",
success: function (data) {
$('#result').html(data);
}
});
});
</script>
控制器:代碼不能打到由於antiforgerytoken或類似的問題,這種操作方法。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public JsonResult Insert(RegisterViewModel model)
{
try
{
//...
//code omitted for brevity
}
}
我只需要一個適當的AJAX和Action方法,可以用於MVC5中的CRUD操作。任何幫助,將不勝感激。
UPDATE:下面是一些點,對此,我需要澄清:
1)我們沒有使用「__RequestVerificationToken」,我不知道,如果我們把它發送到控制器正確(這似乎在Firebug的請求頭中作爲cookie,但我不確定是否可以)。任何想法? 2)我應該使用var formdata = new FormData($('#frmRegister')。get(0));當我上傳文件?
3)爲什麼我必須避免在這種情況下使用processData和contentType?
4)AJAX方法的Controller方法和錯誤部分是否正常?或者那裏有缺失或多餘的部分?
使用var formdata = new FormData($('#frmRegister')。get(0));'將包含防僞標記。所有你需要的是'data:formdata',儘管它不清楚爲什麼你使用FormData(你也在上傳文件嗎?) –