Запрос jQuery AJAX, возвращающий HTML вместо результата JSON (Razor Pages) - PullRequest
0 голосов
/ 29 ноября 2018

У меня проблемы с извлечением данных из запроса AJAX в ASP.NET Core Razor Pages.

Код запроса Ajax (содержится в блоке <script> на страницах бритвы .cshtml-страница:

$("body").ready(function AjaxTest() {
    $.ajax({
        contentType: 'application/json; charset=utf-8',
        dataType: 'text',
        url: '/Menus/Admin_MainMenu?action=TestMethod',
        method: 'GET',
        success: function (data) {
            alert("Request Successful" + data);
        },
        error: function () {
            alert("Request Failed");
        }
    });
})

И соответствующий метод PageModel (как тест на данный момент):

[HttpGet]
public string TestMethod()
{
    string mystring = "success";
    return mystring;
}

Я знаю, что запрос работает, так как я получаю предупреждение "Запрос выполнен успешно". Однако вместо "«Запрос выполнен», после чего следует мое значение mystring, я получаю строку HTML, соответствующую макету страницы .cshtml.

Я попытался изменить тип данных на JSON (оба в AJAXзапрос с использованием dataType, а в методе возвращает тип (jsonrequest), но это делает запрос неудачным.

Любая помощь очень ценится. Спасибо.

1 Ответ

0 голосов
/ 30 ноября 2018

Проблема при использовании dataType: 'text' заключается в том, что строка может отображаться как вывод HTML вместо простой строки.Кроме того, объявление function AjaxTest() в событии ready не является правильным способом объявления функции внутри обратного вызова AJAX, даже синтаксис действителен из-за проблем с областью видимости.

Вам необходимо использовать JsonResult тип возврата вместо string:

public JsonResult OnGetTestMethod()
{
    string mystring = "success";
    return new JsonResult(mystring);
}

Затем используйте параметр handler внутри вызова AJAX:

$(document).ready(function () {
    $.ajax({
        dataType: 'json',
        url: '/Menus/Admin_MainMenu?handler=TestMethod',
        type: 'GET',
        success: function (data) {
            alert("Request Successful " + data);
        },
        error: function () {
            alert("Request Failed");
        }
    });
});

Примечание:

1) JsonResult упомянутое здесь не System.Web.Mvc.JsonResult, оно использует Microsoft.AspNetCore.Mvc.JsonResult и не имеет свойства JsonRequestBehavior.

2) Использование страниц бритвы OnGetи OnPost префиксы метода действия для обработки HTTP GET и POST соответственно, поэтому атрибут [HttpGet] не требуется.

Дополнительные ссылки:

Обработка запросов Ajax в ASP.NETCore Razor Pages

ASP.NET Core Razor Pages: Как реализовать запросы AJAX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...