Обработчик страницы в коде ASP.NET не вызван / не найден запросом AJAX - PullRequest
0 голосов
/ 12 июня 2019

У меня есть именованный метод-обработчик страницы на странице (странице) в моем приложении ASP.NET Core, который вызывается нажатием опции select2.Но метод в коде не вызывается.Вместо этого ajax-запрос возвращает результат, который представляет собой полный HTML-код страницы.В приложении есть еще одна страница с почти таким же кодом.и отлично работает (индекс).По какой-то причине запрос ajax в page.js может увидеть и использовать обработчик в Index.cshtml.cs.

Я пробовал:

-Изменение имени метода и URL

-Изменение формата URL-адреса с '/? Handler = ...' на '/ Page / OnGetCampaign' и использование полного имени метода 'OnGetCampaign', но они вызывают ошибку 404.

- Запуск приложения в разных браузерах

Обработчик в page.cshtml.cs:

public JsonResult OnGetCampaign(string filterBy)
{
    var res = context.dbset.AsNoTracking()
        .ToListAsync().Result.FindAll(x => x.advertiser == filterBy);
    return new JsonResult(res);
}

AJAX-запрос в page.js:

    $('#selector').on('select2:select', function (e) {
        var selId = e.params.data.text;
        console.log(selId);
        $.ajax({
            type: "GET",
            url: '/?handler=Campaign',
            data: {
                FilterBy: selId
            }
        }).done(function (result) {
            console.log(result);
            for (var i = 0; i < result.length; i++) {
                //appending data to a table
            }
        });
    });

Результатом должен быть простой массив, но если URL-адрес ajax-запроса находится в формате 'url: /? Handler = (method)', то результатом будет набор html и если он находится в методе 'url: / Page / OnGet (method)) 'форматирование завершается с ошибкой 404.

edit: Вот как выглядит структура папок в моем проекте:

Solution 'project'
-\project
    -\wwwroot
        -css
        -js
        -images...
    -\Pages
        -\Shared
            -_Layout.cshtml
            -...
        -Index.cshtml
            -Index.cshtml.cs
        -Page.cshtml
            -Page.cshtml.cs
        -other pages...
    Classes.cs
    DbContexts.cs
    Startup.cs
    Program.cs

1 Ответ

0 голосов
/ 13 июня 2019

Если обработчик реализован в том же контроллере для представления, запрос должен быть:

$.ajax({
    type: "GET",
    url: 'OnGetCampaign',
    data: {
        FilterBy: selId
    }
})

Редактировать : Немного отличается, но стоит попробовать, в Page.cshtml:

$.ajax({
    type: "GET",
    url: '/page/OnGetCampaign/' + selId        
})

А в вашем контроллере:

[Route("page")]
public class PageController : Controller
{
    [Route("OnGetCampaign/{selId}")]
    public IActionResult Demo2(string selId)
    {
        return new JsonResult("Hello " + selId);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...