2011-01-02 15 views
134

W domyślnie ASP.NET MVC 3 projekt, układ & częściowe pliki cshtml rozpocząć się od podkreśleniaDlaczego Razor _layout.cshtml ma wiodący znak podkreślenia w nazwie pliku?

  • _viewstart
  • _Layout
  • _LogOnPartial

Co to jest konwencja średnią, a co jest używany do? Czy muszę przestrzegać tej konwencji?

Czy struktura nadaje specjalne znaczenie plikowi .cshtml zaczynającemu się od podkreślenia?

+0

używam NancyFX z brzytwa i ponieważ domyślnie ogranicza żadnych treści, które nie znajduje się w folderze Content. (Można to przesłonić w web.config lub w niestandardowej konfiguracji) nie można bezpośrednio obsługiwać żadnych plików, takich jak .cshtml. Więc nie używam "_" przed nazwami moich widoków, ponieważ nie jest to konieczne i brzydkie. –

Odpowiedz

193

Brzytwa została opracowana dla stron internetowych ASP.NET (WebMatrix), która nie ma tego samego rodzaju ochrony wbudowanej w odniesieniu do folderów Widoki i routingu, które można uzyskać w MVC. Ponieważ strony układu stron internetowych nie są przeznaczone do bezpośredniego wyświetlania, są one poprzedzane znakiem podkreślenia. Ramy stron sieci Web zostały skonfigurowane tak, aby nie zezwalać bezpośrednio na żądania plików z wiodącymi podkreśleniami w ich nazwach. Inne pliki .cshtml na stronach sieci Web zazwyczaj muszą być dostępne do przeglądania. Są one odpowiednikiem plików .asp lub .php.

Zespół ASP.NET stwierdził, że strony WWW są punktem wyjścia w rozwoju ASP.NET, co powinno doprowadzić do migracji do MVC w czasie (dla tych, którzy chcą się poruszać). Częściowo oznacza to, że migracja ze stron internetowych do MVC powinna być jak najłatwiejsza. W związku z tym sensowne jest przenoszenie konwencji nazewnictwa ustanowionych na stronach WWW na pliki maszynki MVC.

Więc jest powód techniczny poprzedzenie nazwy plików ze znakiem podkreślenia - po prostu nie ma znaczenia dla MVC.

+5

Dzięki. Dla mnie jest to najbardziej wnikliwa odpowiedź. Byłem w niezrozumieniu, że Razor był związany z MVC. Teraz widzę, że powodem wiodącego podkreślenia jest uniemożliwienie ich wyświetlania bezpośrednio w ASP.NET Web Pages. – richb

+1

Konwencja nazewnictwa, która faktycznie ma powiązaną funkcjonalność, myślałem, że MS będzie wiedzieć lepiej. A teraz jest przenoszony do MVC, który miał być czystym kontem. –

+0

Mam nadzieję, że po aktualnych wydaniach platformy .NET Framework 4.5.1 i Visual Studio 2013, w tym funkcjonalności "One ASP.NET", mogą one w końcu odejść od ograniczeń technicznych/kodowania twardego. Oczywiście posiadanie standardowych plików, które nigdy nie są udostępniane, jest niezbędne, tak jak w przypadku bieżących katalogów * .config, APP_Code i APP_Data. Jednak logika ta powinna znajdować się gdzieś w pliku konfiguracyjnym (domyślnie konfiguracja maszyny), aby można ją było przesłonić. Również te domyślne nazwy popularnych stron powinny być konfigurowalne (Layout/Error/etc ...). –

7

Strony, których nie można wyświetlić za pomocą bezpośrednich żądań przeglądarki (strony wzorcowe, widoki częściowe itp.) Mają podkreślenie (_) na początku ich nazw.

Jeśli więc spróbujesz wysłać żądanie do _Layout.cshtml (to jest strona wzorcowa), otrzymasz błąd z serwera.

Jest to sposób na odróżnienie plików, które nie mogą być przeglądane jako samodzielne strony, w widoku maszynki Razor.

Pomyśl o tym w ten sposób ... w MVC 2 ... odróżnisz widok częściowy i mastersyt z sufix. Master, .ascx, a strony normalne to .aspx, z drugiej strony, w Razor view ... wszystkie widoki to .cshtml, więc aby odróżnić częściowe i masterpages, będą miały prefiks (_). nic nie jest obowiązkowe, tylko "konwencja".

+3

Ale przez tę logikę nie ALL pliki cs & cshtml mają przedrostek z podkreśleniem? – richb

+0

jeśli wszystkie pliki miałyby _ jako przedrostek, wtedy twoja strona nie działałaby ... pliki, które mają _prefiks, są renderowane wewnątrz normalnej strony ... (dla częściowych), a sitemaster jest szablonem ... więc musi mieć treść do wyświetlenia. – Juztin

+0

Po prostu próbowałem tego, a IIS na moim pudełku nie obsługuje żadnych plików z katalogu Views. Nawet statyczne pliki .html. Więc naprawdę nie sądzę, że to jest odpowiedź. – richb

2

O ile mi wiadomo, jest to po prostu konwencja używana do identyfikacji intencji pliku; Nie wierzę, że to faktycznie zmieni zachowanie pliku. W większości kontekstów programistycznych poprzedzanie podkreślenia oznacza, że ​​coś należy rozumieć jako "prywatne", niezależnie od tego, czy chodzi o klasę, czy w tym przypadku o inny szablon.

13

Tak robi się Ruby on Rails (części zaczynają się od _, ale wywołanie częściowe Render nie obejmuje _), a ASP.net MVC czerpało z niego dużą inspirację.

Naprawdę nie ma żadnego powodu technicznego, tylko konwencja, która jasno wskazywałaby na zamiary innych deweloperów (i ciebie samego 6 miesięcy później), aby powiedzieć: To jest częściowy widok.

+0

jest to niepoprawne, jak wskazano powyżej - podkreślenie ma funkcję bezpieczeństwa. – iJungleBoy

+1

@iJungleBoy Zobacz zaakceptowaną odpowiedź. dla ASP.net MVC (o czym jest to pytanie), nie ma funkcji bezpieczeństwa. Zobacz web.config w folderze Widoki, który już blokuje wszystkie pliki cshtml i aspx, podkreślenie lub nie (ustawia dla nich 'System.Web.HttpNotFoundHandler'). –

1

Nie używam MVC, ale ze stronami internetowymi, które również używają składni brzytwy, prefiks _ ogólnie oznacza, że ​​strona nie jest przeznaczona do uzyskania dostępu przez użytkownika, ale przez inne strony lub jakiś kod. Jeśli spróbujesz przejść do strony zawierającej _prefiks, asp.net uniemożliwi dostęp do niej. To jest powód, dla którego jest używany na stronach układu i innych takich stronach, ponieważ nie powinny być dostępne bezpośrednio przez użytkownika.

Coś w folderze App_Code w ASP.NET

+0

@MikeBrind Nie można "nawigować" do/przeglądać bezpośrednio * dowolnych * widoków w ramach '/ view' w domyślnym projekcie ASP.NET MVC; Plik '/ views/web.config' jest skonfigurowany, aby temu zapobiec. Ale nie ma * nic *, aby powstrzymać działanie kontrolera przed powrotem 'View (" _ Index ", model);' Działa dobrze; Po prostu zrobiłem to, zmieniając nazwę widoku na _Index.cshtml i zmieniając akcję tak, jak to robiłem powyżej. –

+0

@MikeBrind To pytanie dotyczy MVC, a nie stron WWW. Zgoda; Nie określiłem tego w moim oryginalnym komentarzu. –

+0

@MikeBrind Byłem - i odpowiadam na * tę * odpowiedź. Nie twoje. Mój wstępny komentarz był mylący (chociaż wspomniałem również o "cząstkach"), więc usunąłem go. Chodzi mi o to, że podkreślenia * nie mają nic wspólnego z tym, że nie można załadować widoku w MVC. Ten użytkownik nawet zaczął mówić: "Nie używam MVC", ale to pytanie dotyczyło MVC.Po prostu upewniam się, że ktoś przychodzi później, czytając * tę * odpowiedź, nie wydaje mi się, że w MVC podkreślenie wpływa na zdolność akcji kontrolera do załadowania widoku. Nie ma sprawy. Zgadzamy się, że byłem niezadowolony z tego, jak mówiłem. Gotowe. –

Powiązane problemy