#javascript #jquery #ajax #asp.net-core #razor-pages
#javascript #jquery #ajax #asp.net-core #razor-страницы
Вопрос:
У меня есть функция JavaScript / jQuery, используемая для выполнения запросов AJAX как часть ASP.NET Проект Core Razor Pages (Visual C #). Запрос AJAX вызывает метод обработчика «OnGet» в PageModel (.cshtml.cs) любой страницы, на которой он вызывается. AJAX-запрос JS / jQuery:
function conditionalDropDown(parameters) {
//code to get handler method inputs in correct format
var pathname = window.location.pathname;
var handler = "?handler=ConditionalDropDown";
var actionpath = pathname handler;
$.ajax({
dataType: 'json',
url: actionpath,
type: 'GET',
data: {
parameterName: parameterValue
},
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
success: function (data) {
//dealing with the data returned by the request
},
error: function () {
alert("AJAX Request Failed, Contact Support");
}
});
}
Метод обработчика в PageModel:
public JsonResult OnGetConditionalDropDown(parameters)
{
//call a function to get the return string
return new JsonResult(dropdownHTML);
}
Я хочу изменить свой AJAX-запрос таким образом, чтобы вместо него использовался метод обработчика «OnPost». Я пытался изменить type: 'GET'
на type: 'POST'
в функции запроса AJAX и имя метода обработчика с OnGetConditionalDropDown
на OnPostConditionalDropDown
, но запрос всегда завершается неудачей.
Я @Html.AntiForgeryToken()
добавил на страницу (.cshtml), с которой отправляется запрос AJAX, но я не уверен, что это в нужном месте. В настоящее время он находится внутри <form>
тегов формы, из которой вызываются AJAX-запросы.
Я думаю, что мне чего-то не хватает в настройке запроса, но я понятия не имею, что это. Любая помощь приветствуется.
Ответ №1:
Отвечая на мой собственный вопрос…
- Запрос AJAX — удалена
beforeSend
функция в запросе, заменена на:headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
при инициализации запроса. - Запрос AJAX — изменен
type: 'GET'
наtype: 'POST'
- Метод обработчика —
OnGet
—>OnPost
- Page .cshtml — удален
@Html.AntiForgeryToken()
, добавленmethod="post"
в форму, из которой выполняется запрос AJAX
Теперь работает отлично!