我將MVC Core 1中的應用程序轉換爲2.除了現在支持分頁的控制器操作無法按照慣例在提供Page參數時按慣例搜索視圖路徑之外,一切正常。例如:MVC Core 2.0不按照慣例搜索視圖
/User/Index
作品展UserController
發現/Views/User/Index.cshtml
/User/Index?Page=2
作品。
/User/Index/Page2
與
InvalidOperationException異常失敗:視圖 '索引' 沒有被發現。搜索了以下位置:/ Views/Shared/Index.cshtml`
注意不搜索/Views/User anymore
。
由於頁面鏈接被標籤助手更改爲/User/Index/Page2
格式,因此路由似乎正在工作。如果我刪除了分頁路徑,那麼這些網址會恢復到查詢字符串版本。這裏是我的路線:
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));
分頁網址工作,如果我指定要查看完整的路徑:
public async Task<IActionResult> Index(int page = 1) =>
View("~/Views/User/Index.cshtml", await GetIndexModel(page));
我用的是相同的分頁模式在許多控制器中,現在它們都以相同的方式被破壞。分頁URL和View按照慣例在Core 1中工作,任何想法爲什麼Core 2在某些情況下不會按照慣例搜索View?頁面參數與Controller View搜索有什麼關係?我如何強制控制器每次都按照慣例搜索視圖?
我將註釋掉分頁路徑並回退到使用查詢字符串URL,因爲更改參數名稱Page涉及更新所有操作簽名。實際上,這條路線是使URL更「漂亮」。 – szozz