我在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
答案 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);
}
}