2011-01-02 16 views
134

In dem Standard ASP.NET MVC 3-Projekt, das Layout & Teil cshtml Dateien mit einem Unterstrich beginnenWarum hat Razor _layout.cshtml einen führenden Unterstrich im Dateinamen?

  • _viewstart
  • _Layout
  • _LogOnPartial

Was diese Konvention Mittelwert ist, und was wird für verwendet? Muss ich dieser Konvention folgen?

Gibt das Framework einer .cshtml Datei, die mit einem Unterstrich beginnt, eine besondere Bedeutung?

+0

Ich benutze NancyFX mit Razor und da standardmäßig beschränkt er auf den Inhalt, die nicht im Content-Ordner ist. (Dies kann in web.config oder benutzerdefinierte Konfiguration überschrieben werden) es ist unmöglich, alle Dateien wie .cshtml direkt zu dienen. Also verwende ich nicht "_" vor meinen Namen, weil es NICHT notwendig und hässlich ist. –

Antwort

193

Razor wurde für ASP.NET-Webseiten (WebMatrix) entwickelt, die nicht die gleiche Art von Schutz in Bezug auf Views-Ordner und Routing haben, die Sie in MVC erhalten. Da Layoutseiten in Webseiten nicht direkt geliefert werden sollen, wird ihnen der Unterstrich vorangestellt. Und das Webseiten-Framework wurde so konfiguriert, dass Dateien mit führenden Unterstrichen in ihren Namen nicht direkt angefordert werden. Andere .cshtml-Dateien innerhalb von Webseiten müssen in der Regel durchsuchbar sein. Sie entsprechen den ASP- oder .php-Dateien.

Das ASP.NET-Team hat angegeben, dass Webseiten ein Ausgangspunkt innerhalb der ASP.NET-Entwicklung sind, was zu einer rechtzeitigen Migration zu MVC führen sollte (für diejenigen, die fortfahren möchten). Ein Teil davon bedeutet, dass es so einfach wie möglich sein sollte, von Webseiten zu MVC zu migrieren. Daher ist es sinnvoll, die Namenskonventionen von Webseiten in MVC Razor-Dateien zu übernehmen.

So gibt ist ein technischer Grund für mit einem Unterstrich der Dateinamen voranstellen - es ist nur zu MVC nicht relevant ist.

+5

Danke. Für mich ist das die aufschlussreichste Antwort. Ich hatte das Missverständnis, dass Razor an MVC gebunden war. Jetzt sehe ich den Grund für den führenden Unterstrich darin, zu verhindern, dass sie direkt unter ASP.NET-Webseiten ausgeliefert werden. – richb

+1

Eine Namenskonvention, an die tatsächlich eine Funktionalität gebunden ist, dachte ich, MS würde es besser wissen. Und jetzt wird es zu MVC übertragen, was eigentlich eine saubere Sache sein sollte. –

+0

Hoffentlich nach den aktuellen .NET Framework 4.5.1 und Visual Studio 2013 Releases einschließlich "One ASP.NET" -Funktionalität können sie sich endlich von diesen technischen Einschränkungen/Hard-Coding entfernen. Natürlich ist es nicht notwendig, Standard-Dateien zu verwenden, die niemals geteilt werden, wie bei den aktuellen Verzeichnissen * .config, APP_Code und APP_Data. Aber diese Logik sollte irgendwo in einer Konfigurationsdatei (Maschinenkonfiguration als Standard) sitzen, damit sie überschrieben werden kann. Auch diese Standardnamen von allgemeinen Seiten sollten konfigurierbar sein (Layout/Fehler/etc ...). –

7

Seiten, die nicht durch direkte Anfragen von Ihrem Browser angezeigt werden können (Masterseiten, Teilansichten usw.), haben einen Unterstrich (_) am Anfang ihrer Namen.

Also, wenn Sie versuchen, die Anfrage an _Layout.cshtml (das ist Master-Seite) zu machen, erhalten Sie einen Fehler vom Server.

Es ist eine Möglichkeit, die Dateien, die nicht als eigenständige Seiten durchsucht werden können, in der Razor View Engine zu unterscheiden.

Denken Sie mal so ... in MVC 2 ... würden Sie die Teilansicht und die Masterseite mit dem Suffix .master, .ascx und normalen Seiten unterscheiden, in Razor dagegen .aspx view ... alle Views sind .cshtml, um also Partial- und Masterpages zu unterscheiden, haben sie ein Präfix (_). es ist nichts zwingendes, nur eine "Konvention".

+3

Aber durch diese Logik würde nicht alle cs & cshtml-Dateien mit einem Unterstrich vorangestellt werden? – richb

+0

Wenn alle Dateien _ als Präfix hätten, dann würde Ihre Site nicht funktionieren ... Dateien, die _prefix haben, werden in einer normalen Seite gerendert ... (für Partials), und der Sitemaster ist eine Vorlage ... also muss er Inhalt haben Angezeigt werden. – Juztin

+0

Also habe ich das gerade versucht, und IIS auf meiner Box liefert keine Dateien aus dem Views-Verzeichnis. Nicht einmal statische .html-Dateien. Also ich glaube wirklich nicht, dass dies die Antwort ist. – richb

2

Soweit ich weiß, ist dies einfach eine Konvention verwendet, um die Absicht der Datei zu identifizieren; Ich glaube nicht, dass es tatsächlich das Verhalten der Datei ändern wird. In den meisten Entwicklungskontexten bedeutet das Voranstellen eines Unterstrichs, dass etwas für eine "private" Verwendung bestimmt ist, sei es durch eine Klasse oder in diesem Fall durch eine andere Vorlage.

13

So funktioniert Ruby on Rails (Partials beginnen mit einem _, aber der Render Partial Aufruf enthält nicht _), und ASP.net MVC hat sich stark davon inspirieren lassen.

Kein technischer Grund wirklich, nur eine Konvention, um anderen Entwicklern (und sich selbst 6 Monate später) die Absicht zu zeigen, klar zu sagen: Dies ist eine Teilansicht.

+0

das ist falsch, wie von der Antwort oben unterstrichen - Unterstreichung hat eine Sicherheitsfunktion. – iJungleBoy

+1

@iJungleBoy Siehe die angenommene Antwort. Für ASP.net MVC (worüber diese Frage geht) gibt es keine Sicherheitsfunktionalität. Siehe die Datei web.config im Ordner Views, die bereits alle cshtml- und aspx-Dateien blockiert, Unterstreichung oder nicht (richtet 'System.Web.HttpNotFoundHandler' für sie ein). –

1

Ich benutze MVC nicht, aber mit Webseiten, die auch die Rasierersyntax verwenden, besagt das _ Präfix im Allgemeinen, dass die Seite nicht von einem Benutzer, sondern von anderen Seiten oder irgendeinem Code zugegriffen werden soll. Wenn Sie versuchen, zu einer Seite zu navigieren, die das _prefix enthält, würde asp.net den Zugriff darauf verhindern. Das ist, warum es mit Layout-Seiten und anderen solchen Seiten verwendet wird, da auf sie nicht direkt von einem Benutzer zugegriffen werden sollte.

So etwas wie der Ordner App_Code in asp.net

+0

@MikeBrind Sie können in einem ASP.NET MVC-Standardprojekt nicht * alle * Views unter '/ view' direkt zu/durchsuchen * durchsuchen. Die Datei '/ views/web.config' ist eingerichtet, um dies zu verhindern. Aber es gibt * nichts *, um zu verhindern, dass eine Controller-Aktion 'View (" _Index ", Modell) zurückgibt;' Es funktioniert ganz gut; Ich habe es gerade getan, indem ich den Namen einer Ansicht in _Index.cshtml geändert und die Aktion wie oben beschrieben geändert habe. –

+0

@MikeBrind Diese Frage bezieht sich auf MVC, nicht auf Webseiten. Gewährt; Ich habe das in meinem ursprünglichen Kommentar nicht angegeben. –

+0

@MikeBrind Ich war - und antworte - auf * diese * Antwort. Nicht deins. Mein erster Kommentar war irreführend (ich habe auch "Partials" erwähnt), also habe ich ihn gelöscht. Mein Punkt war und ist, dass Unterstriche * nichts * damit zu tun haben, eine Ansicht in MVC nicht laden zu können. Dieser Benutzer begann sogar zu sagen: "Ich benutze MVC nicht", doch diese Frage ging um MVC.Ich stelle nur sicher, dass jemand, der später kommt und diese * Antwort * liest, nicht denkt, dass in MVC ein Unterstrich die Fähigkeit einer Controller-Aktion beeinflusst, eine Ansicht zu laden. Keine große Sache. Wir stimmen zu, dass ich in meinem Sprechen unausgesprochen war. Erledigt. –

Verwandte Themen