Я попытался использовать вызов AJAX в проекте MVC5 как и многие аналогичные примеры в Интернете, но каждый раз, когда появляется ошибка, т.е. antiforgerytoken, 500 и т. Д. Я рассматриваю правильный метод вызова AJAX с методом Action Control, который обладает всеми необходимыми свойствами и передает данные модели из View в Controller Action. Вот методы, которые я использовал:Использование вызова AJAX в MVC5
Вид:
@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, которые могут использоваться для операций CRUD в MVC5. Любая помощь будет оценена по достоинству.
UPDATE: Вот некоторые моменты, о которых мне нужно уточнить:
1) Мы не использовали «__RequestVerificationToken», и я не уверен, что если мы посылаем его к надлежащему контроллеру (это, кажется, быть как cookie в заголовках запроса Firebug, но я не уверен, что все в порядке или нет). Есть идеи?
2) Должен ли я использовать var formdata = new FormData ($ ('# frmRegister'). Get (0)); когда я загружаю файлы?
3) Почему я должен избегать использования processData и contentType в этом сценарии?
4) Является ли метод контроллера и ошибка в методе AJAX в порядке? Или там отсутствует какая-либо дополнительная часть?
Использование 'var formdata = new FormData ($ ('# frmRegister'). Get (0));' будет включать токен antiforgery. Все, что вам нужно, это «data: formdata», хотя неясно, почему вы используете 'FormData' (вы также загружаете файлы?) –