Im Standardprojekt ASP.NET MVC 3 beginnen Layout- und teilweise cshtml-Dateien mit einem Unterstrich
_viewstart
_Layout
_LogOnPartial
Warum diese Konvention und wofür wird sie verwendet? Muss ich diese Konvention befolgen?
Verleiht das Framework einer .cshtml
Datei, die mit einem Unterstrich beginnt, eine besondere Bedeutung ?
asp.net
asp.net-mvc-3
razor
richb
quelle
quelle
Antworten:
Razor wurde für ASP.NET-Webseiten (WebMatrix) entwickelt, die nicht den gleichen Schutz bieten, den Sie in Bezug auf Ansichtsordner und Routing in MVC erhalten. Da Layoutseiten in Webseiten nicht direkt bereitgestellt werden sollen, wird ihnen der Unterstrich vorangestellt. Das Webseiten-Framework wurde so konfiguriert, dass Dateien mit führenden Unterstrichen in ihren Namen nicht direkt angefordert werden können. Andere .cshtml-Dateien auf Webseiten müssen im Allgemeinen durchsuchbar sein. Sie entsprechen .asp- oder .php-Dateien.
Das ASP.NET-Team hat angegeben, dass Webseiten ein Ausgangspunkt für die ASP.NET-Entwicklung sind, der rechtzeitig zur Migration auf MVC führen sollte (für diejenigen, die fortfahren möchten). Ein Teil davon bedeutet, dass die Migration von Webseiten zu MVC so einfach wie möglich sein sollte. Infolgedessen ist es sinnvoll, in Webseiten festgelegte Namenskonventionen auf MVC Razor-Dateien zu übertragen.
Es gibt also einen technischen Grund, den Dateinamen einen Unterstrich voranzustellen - dies ist für MVC einfach nicht relevant.
[UPDATE Okt 2018]
Im neuen ASP.NET Core Razor Pages-Framework (außer in Version 2.1) werden Dateien mit einem führenden Unterstrich ignoriert, wenn Routen beim Start generiert werden - selbst wenn sie eine
@page
Direktive haben (was sie normalerweise zu einer routbaren Razor Page macht). . Aus diesem Grund ist es sinnvoll, Layout- und Teildateien mit einem führenden Unterstrich in einer Razor Pages-Anwendung zu benennen, wenn sie nicht zum Durchsuchen vorgesehen sind.quelle
So macht es Ruby on Rails (Partials beginnen mit einem _, aber der Render Partial-Aufruf enthält nicht das _), und ASP.net MVC hat sich stark davon inspirieren lassen.
Eigentlich kein technischer Grund, nur eine Konvention, um anderen Entwicklern (und Ihnen 6 Monate später) klar die Absicht zu zeigen, zu sagen: Dies ist eine Teilansicht.
quelle
System.Web.HttpNotFoundHandler
für sie eingerichtet).Seiten, die nicht durch direkte Anforderungen Ihres Browsers angezeigt werden können (Masterseiten, Teilansichten usw.), haben am Anfang ihres Namens einen Unterstrich (_).
Wenn Sie also versuchen, die Anforderung an _Layout.cshtml (dies ist die Masterseite) zu senden, wird vom Server eine Fehlermeldung angezeigt.
Auf diese Weise können Sie die Dateien unterscheiden, die in der Razor View Engine nicht als eigenständige Seiten durchsucht werden können.
Stellen Sie sich das so vor ... in MVC 2 ... würden Sie die Teilansicht und die Mastersite mit dem Sufix .master, .ascx unterscheiden, und normale Seiten sind .aspx, in der Razor-Ansicht dagegen ... Alle Ansichten sind .cshtml. Um Teil- und Masterseiten zu unterscheiden, haben sie ein Präfix (_). Es ist nichts obligatorisch, nur eine "Konvention".
quelle
Soweit ich weiß, handelt es sich lediglich um eine Konvention, mit der die Absicht der Datei ermittelt wird. Ich glaube nicht, dass dies das Verhalten der Datei tatsächlich ändern wird. In den meisten Entwicklungskontexten identifiziert das Voranstellen eines Unterstrichs etwas, das für den "privaten" Gebrauch bestimmt ist, sei es für eine Klasse oder in diesem Fall für eine andere Vorlage.
quelle
Ich verwende MVC nicht, aber bei Webseiten, die auch die Rasierersyntax verwenden, bedeutet das Präfix _ im Allgemeinen, dass auf die Seite nicht von einem Benutzer zugegriffen werden soll, sondern von anderen Seiten oder einem Code. Wenn Sie versuchen, zu einer Seite zu navigieren, die das _prefix enthält, verhindert asp.net den Zugriff darauf. Deshalb wird es mit Layoutseiten und anderen solchen Seiten verwendet, da ein Benutzer nicht direkt darauf zugreifen sollte.
So etwas wie der App_Code-Ordner in asp.net
quelle
/view
in einem Standard-ASP.NET MVC-Projekt direkt zu einer der Ansichten navigieren / diese durchsuchen . Die/views/web.config
Datei ist so eingerichtet, dass dies verhindert wird. Aber nichts hindert eine Controller-Aktion daran, zurückzukehren.View("_Index", model);
Es funktioniert einwandfrei. Ich habe es einfach getan, indem ich den Namen einer Ansicht in _Index.cshtml geändert und die aufzurufende Aktion wie oben beschrieben geändert habe.