无法通过AJAX请求调用/找不到ASP.NET代码中的页面处理程序

时间:2019-06-12 20:51:42

标签: c# jquery asp.net ajax

我在ASP.NET Core应用程序的页面(页面)上有一个命名页面处理程序方法,通过单击select2选项可以调用该方法。但是没有调用后面代码中的方法。相反,ajax请求返回的结果只是页面的完整html。应用程序中还有另一个页面具有几乎完全相同的代码。并且工作正常(索引)。由于某种原因,page.js中的ajax请求可以在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);
}

page.js中的AJAX请求:

    $('#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
            }
        });
    });

结果应该是一个简单的数组,但如果ajax请求url为'url:/?handler =(method)'格式,则结果为一堆html,如果为'url:/ Page / OnGet (方法)格式失败,并显示404错误。

编辑:这就是我项目中的文件夹结构:

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 :(得分:0)

如果处理程序是在视图的同一控制器中实现的,则请求应为:

$.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);
    }
}