Использование обработчиков страниц OnPost для запросов AJAX на бритвенных страницах - PullRequest
0 голосов
/ 12 марта 2019

У меня есть функция 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 Ответ

0 голосов
/ 12 марта 2019

Отвечая на мой вопрос ...

  1. AJAX-запрос - удалена beforeSend функция в запросе, заменена на: headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() }, в инициализации запроса.
  2. AJAX-запрос - изменено type: 'GET' на type: 'POST'
  3. Метод обработчика - OnGet -> OnPost
  4. Страница .cshtml - удалено @Html.AntiForgeryToken(), добавлено method="post" в форму, из которой выполняется AJAX-запрос

Отлично работает сейчас!

...