W domyślnym projekcie ASP.NET MVC 3 układ i częściowe pliki cshtml zaczynają się od podkreślenia
_viewstart
_Layout
_LogOnPartial
Po co ta konwencja i do czego służy? Czy muszę przestrzegać tej konwencji?
Czy struktura nadaje specjalne znaczenie .cshtml
plikowi, który zaczyna się od podkreślenia?
asp.net
asp.net-mvc-3
razor
Richb
źródło
źródło
Odpowiedzi:
Razor został opracowany dla stron sieci Web ASP.NET (WebMatrix), które nie mają tego samego rodzaju ochrony wbudowanej w odniesieniu do folderów widoków 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 poprzedzone podkreśleniem. Struktura stron internetowych została skonfigurowana tak, aby nie zezwalać na bezpośrednie żądanie plików z wiodącymi podkreśleniami w nazwie. Inne pliki .cshtml na stronach internetowych zazwyczaj wymagają możliwości przeglądania. Są odpowiednikami plików .asp lub .php.
Zespół ASP.NET stwierdził, że strony internetowe są punktem wyjścia w rozwoju ASP.NET, co powinno doprowadzić do migracji na MVC w czasie (dla tych, którzy chcą przejść dalej). Po części 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 sieci Web do plików MVC Razor.
Więc nie jest to powód techniczny poprzedzenie nazwy plików ze znakiem podkreślenia - po prostu nie ma znaczenia dla MVC.
[UPDATE paź 2018]
W nowej platformie ASP.NET Core Razor Pages (poza wersją 2.1) pliki z początkowym podkreśleniem są ignorowane, gdy trasy są generowane podczas uruchamiania - nawet jeśli mają
@page
dyrektywę (która normalnie uczyniłaby je stroną Razor z trasowaniem) . Dlatego sensowne jest nazywanie układu i częściowych plików z wiodącym podkreśleniem w aplikacji Razor Pages, jeśli nie są one przeznaczone do przeglądania.źródło
W ten sposób robi to Ruby on Rails (fragmenty zaczynają się od _, ale wywołanie Render Partial nie zawiera _), a ASP.net MVC czerpał z niego wiele inspiracji.
Żadnego technicznego powodu, tak naprawdę, tylko konwencja, aby jasno pokazać innym programistom (i sobie 6 miesięcy później) zamiar powiedzenia: To jest częściowy pogląd.
źródło
System.Web.HttpNotFoundHandler
je).Strony, których nie można wyświetlić za pomocą bezpośrednich żądań z przeglądarki (strony wzorcowe, częściowe wyświetlenia itp.) Mają na początku nazwy podkreślenie (_).
Więc jeśli spróbujesz wysłać żądanie do _Layout.cshtml (to jest strona główna), otrzymasz błąd z serwera.
Jest to sposób na rozróżnienie plików, których nie można przeglądać jako samodzielnych stron w silniku widoku Razor.
Pomyśl o tym w ten sposób ... w MVC 2 ... możesz rozróżnić widok częściowy i witrynę główną z sufiksem .master, .ascx, a zwykłe strony to .aspx, z drugiej strony w widoku Razor ... wszystkie widoki są w formacie .cshtml, więc w celu rozróżnienia stron częściowych i stron głównych będą one miały przedrostek (_). to nic obowiązkowego, po prostu „konwencja”.
źródło
O ile wiem, jest to po prostu konwencja używana do określenia intencji pliku; Nie wierzę, że faktycznie zmieni to zachowanie pliku. W większości kontekstów programistycznych dodanie znaku podkreślenia na początku identyfikuje coś, co ma być przeznaczone do „prywatnego” użytku, czy to przez klasę, czy w tym przypadku inny szablon.
źródło
Nie używam MVC, ale w przypadku stron internetowych, które również używają składni maszynki do golenia, prefiks _ generalnie oznacza, że strona nie jest przeznaczona do otwierania przez użytkownika, ale inne strony lub jakiś kod. Jeśli spróbujesz przejść do strony zawierającej _prefix, asp.net uniemożliwi dostęp do niej. Dlatego jest używany ze stronami układu i innymi podobnymi stronami, ponieważ użytkownik nie powinien mieć do nich bezpośredniego dostępu.
Coś takiego jak folder App_Code w asp.net
źródło
/view
w domyślnym projekcie ASP.NET MVC;/views/web.config
plik jest skonfigurowany aby temu zapobiec. Ale nic nie stoi na przeszkodzie, aby akcja kontrolera powróciła.View("_Index", model);
Działa dobrze; Po prostu zrobiłem to, zmieniając nazwę widoku na _Index.cshtml i zmieniając akcję na call, tak jak powyżej.