2017-07-25 4 views
2

Beim Versuch, einen generischen .NET Core MVC-Controller zu erstellen, der Sichten zurückgibt, werden die Sichten nicht gefunden (Fehlermeldung: "Sichtdetails können nicht aufgelöst werden"). Dies geschieht, weil der generische Controller nicht an eine bestimmte Ansicht gebunden ist. Die Ansicht sollte basierend auf dem T ausgewählt werden. Ich habe einige Beispiele in ASP.NET gesehen, aber ich kann diese in .NET Core nicht wiederherstellen..NET Core MVC generische Controlleransichten

Gibt es eine gute Möglichkeit, dieses Problem in .NET Core zu lösen?

Allgemein Controller Beispiel:

public class ControllerBase<T> : Controller where T : class 
{ 
    private IManager<T> _manager; 

    public ControllerBase(IManager<T> manager) 
    { 
     _manager = manager; 
    } 

    public async Task<IActionResult> Details(int? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var result = await _manager.Get(id); 
     return View(result); 
    } 
} 
+1

Sind Ihre Ansichten vorhanden und am richtigen Ort platziert? [Dokumentation auf Ansichten] (https://docs.microsoft.com/en-us/aspnet/core/mvc/views/overview) – Rostech

+0

Ja, aber das Problem ist, dass es keine Ansicht für den generischen Controller gibt, da es angenommen wird um die Ansicht basierend auf dem T auszuwählen. Ich bin mir einfach nicht sicher, wie ich das umsetzen soll. –

+0

Ja, ich habe das wirkliche Problem von Ihrer Bearbeitung verstanden. – Rostech

Antwort

0

Wie bereits in den Kommentaren erwähnt können Sie die Ansicht angeben

über

return View("viewName", result); 
verwenden, wo viewName sollte (Ihre Frage an Ihre Anforderungen angepasst werden schlägt vielleicht der Typname des Arguments type?

Es kann ein Problem für die ViewEngine geben, die Ihre Ansicht abhängig von Ihrer Position lokalisiert sie und wie Ihre Controller angeordnet sind. Aber Sie können entweder durch Angabe des vollständigen Pfad zu der Ansicht, dies zu umgehen:

return View("~/Views/path/to/your/generic/viewName.cshtml", result); 

oder die Suchpfade in der Viewengine erstreckt, wie hier erwähnt: Can I specify a custom location to "search for views" in ASP.NET MVC?

0

Der ursprüngliche Code funktioniert tatsächlich wie beabsichtigt, die Problem für mich gelogen mit ReSharper ein Problem melden, wo eigentlich nichts falsch war. Meine Schuld, dass ich es vermisst habe.

Vielen Dank für Ihre Hilfe.

Verwandte Themen