2017-09-27 4 views
2

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?

Antwort

1

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

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

Es ist ein Fehler. ASP.NET Core MVC folgende Versionen wurden gelöst. Temporäre Lösung ist von "{page}" zu einem anderen Namen zu ersetzen.

+1

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

Verwandte Themen