MVC Core 2.0不按惯例搜索视图

时间:2017-09-27 22:04:36

标签: asp.net-mvc asp.net-core-mvc

我将应用程序从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?

1 个答案:

答案 0 :(得分:1)

https://github.com/aspnet/Mvc/issues/6706

https://github.com/aspnet/Mvc/issues/6680

这是一个错误。 ASP.NET Core MVC以下版本将被解除。 临时解决方案是将“{page}”替换为另一个名称。