Ich habe eine Anwendung von MVC Core 1 in 2 konvertiert. Alles funktioniert, außer dass Controller-Aktionen, die die Seitennummerierung unterstützen, den Views-Pfad nicht nach Konvention durchsuchen, wenn der Page-Parameter angegeben wird. Zum Beispiel:MVC Core 2.0 sucht nicht nach Ansicht nach Konvention
/User/Index
Works, The UserController
findet /Views/User/Index.cshtml
/User/Index?Page=2
Works.
/User/Index/Page2
schlägt mit
InvalidOperationException: Die 'Index' Ansicht wurde nicht gefunden. Die folgenden Orte wurden durchsucht:/Views/Shared/Index.cshtml`
Beachten Sie nicht suchen /Views/User anymore
.
Routing scheint zu funktionieren, da die Seitenverknüpfungen von den Tag-Helfern auf /User/Index/Page2
Format geändert werden. Wenn ich die Paginierungsroute entferne, werden die URLs auf die Querystring-Version zurückgesetzt. Hier sind meine Routen:
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}"
);
});
und der Index Aktion von Usercontroller:
public async Task<IActionResult> Index(int page = 1) =>
View(await GetIndexModel(page));
Paginierung URLs arbeiten, wenn ich den gesamten Pfad der Ansicht angeben:
public async Task<IActionResult> Index(int page = 1) =>
View("~/Views/User/Index.cshtml", await GetIndexModel(page));
verwende ich die gleiche Paginierungsmuster in vielen Controllern und jetzt sind sie alle auf die gleiche Weise gebrochen. Paginierungs-URLs und die Ansicht nach Konvention funktionierten in Core 1, jede Idee, warum Core 2 unter bestimmten Umständen nicht nach einer View nach Konvention suchen würde? Was hat der Seitenparameter mit der Suche in der Controller-Ansicht zu tun? Wie kann ich den Controller zwingen, jedes Mal nach der Ansicht zu suchen?
Ich werde die Paginierungsroute auskommentieren und auf die Querystring-URLs zurückgreifen, da das Ändern des Parameternamens Seite die Aktualisierung aller Aktionssignaturen beinhaltet. Die Route besteht darin, die URLs "hübscher" zu machen. – szozz