Die Benennung von Ansichtsverzeichnissen und Dateien ist wichtig, da das ASP.NET MVC-Framework bestimmte Annahmen darüber trifft. Wenn Sie sich nicht an diese Annahmen halten, müssen Sie Code schreiben, damit das Framework weiß, was Sie tun. Im Allgemeinen sollten Sie sich an diese Annahmen halten, es sei denn, Sie haben einen guten Grund, dies nicht zu tun.
Schauen wir uns die einfachste mögliche Controller-Aktion an:
public ActionResult NotAuthorized()
{
return View();
}
Da im Aufruf von View() kein View-Name angegeben wurde, geht das Framework davon aus, dass der View-Dateiname mit dem Action-Namen übereinstimmt. Das Framework hat einen Typ namens ViewEngine, der die Erweiterung liefert. Die Standard-ViewEngine ist die WebFormViewEngine, die diesen Namen nimmt und ein .aspx daran anhängt. Der vollständige Dateiname würde in diesem Fall also NotAuthorized.aspx lauten.
Aber in welchem Ordner wird die Datei gefunden? Auch hier liefert die ViewEngine diese Information. Mit der WebFormViewEngine wird in zwei Ordnern gesucht: ~/Views/Shared und ~/Views/{controller}
Wenn Ihr Controller also AccountController hieße, würde er in ~/Views/Account nachsehen
Es kann jedoch vorkommen, dass Sie sich nicht an diese Regeln halten wollen. Zum Beispiel könnten zwei verschiedene Aktionen dieselbe Ansicht zurückgeben (mit einem anderen Modell, oder so). In diesem Fall können Sie den Namen der Ansicht explizit in Ihrer Aktion angeben:
public ActionResult NotAuthorized()
{
return View("Foo");
}
Beachten Sie, dass bei der WebFormViewEngine der "View-Name" in der Regel derselbe ist wie der Dateiname, abzüglich der Erweiterung, aber das Framework verlangt dies bei anderen View-Engines nicht.
Sie könnten auch einen Grund dafür haben, dass Ihre Anwendung nach Ansichten und nicht standardmäßigen Ordnern suchen soll. Sie können dies tun, indem Sie Ihre eigene ViewEngine erstellen. Ich zeige die Technik in dieser Blogbeitrag , aber die Typnamen sind anders, da sie für eine frühere Version des Frameworks geschrieben wurde. Die Grundidee ist jedoch immer noch dieselbe.