我将应用程序从MVC Core 1转换为2.一切正常,但现在支持分页的Controller Actions在提供Page参数时无法按惯例搜索Views路径。例如:
/User/Index
无效,UserController
找到/Views/User/Index.cshtml
/User/Index?Page=2
工作。
/User/Index/Page2
失败
InvalidOperationException:找不到视图'Index'。搜索了以下位置:/ Views / Shared / Index.cshtml`
请注意不要搜索/Views/User anymore
。
路由似乎正在起作用,因为标记帮助程序将页面链接更改为/User/Index/Page2
格式。如果我删除分页路由,则URL将恢复为查询字符串版本。这是我的路线:
app.UseMvc(routes => {
routes.MapRoute(
name: "pagination",
template: "{controller}/{action}/Page{page}",
defaults: new { action = "Index"}
);
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}"
);
});
UserController的索引动作:
public async Task<IActionResult> Index(int page = 1) =>
View( await GetIndexModel(page));
如果我指定View的整个路径,则分页URL有效:
public async Task<IActionResult> Index(int page = 1) =>
View("~/Views/User/Index.cshtml", await GetIndexModel(page));
我在许多控制器中使用相同的分页模式,现在它们都以相同的方式被破坏。根据惯例,分页URL和视图在Core 1中工作,任何想法为什么Core 2在某些情况下不会按惯例搜索View?页面参数与Controller View搜索有什么关系?如何强制Controller每次按惯例搜索View?
答案 0 :(得分:1)
https://github.com/aspnet/Mvc/issues/6706
https://github.com/aspnet/Mvc/issues/6680
这是一个错误。 ASP.NET Core MVC以下版本将被解除。 临时解决方案是将“{page}”替换为另一个名称。