Razor _layout.cshtml dosya adında neden önde gelen alt çizgiye sahip?


144

Varsayılan ASP.NET MVC 3 projesinde, düzen ve kısmi cshtml dosyaları alt çizgiyle başlar

  • _viewstart
  • _Layout
  • _LogOnPartial

Neden bu sözleşme ve bu ne için kullanılıyor? Bu sözleşmeyi izlemem gerekir mi?

Çerçeve .cshtml, alt çizgiyle başlayan bir dosyaya özel bir anlam veriyor mu?


NancyFX'i Razor ile kullanıyorum ve varsayılan olarak İçerik klasöründe olmayan herhangi bir içeriği kısıtlıyor. (Bu, web.config veya özel yapılandırmada geçersiz kılınabilir) .cshtml gibi herhangi bir dosyayı doğrudan sunmak imkansızdır. Bu yüzden görünüm adlarıma ekli "_" kullanmıyorum çünkü gerekli ve çirkin DEĞİL.
Norbert Norbertson

Yanıtlar:


205

Razor, MVC içinde aldığınız Views klasörleri ve Yönlendirme ile ilgili olarak aynı koruma türüne sahip olmayan ASP.NET Web Sayfaları (WebMatrix) için geliştirilmiştir. Web Sayfalarındaki mizanpaj sayfalarının doğrudan sunulması amaçlanmadığından, alt çizgi ile ön ek yerleştirilir. Web Sayfaları çerçevesi, adlarında önde gelen alt çizgi bulunan dosyaların doğrudan istenmesine izin vermeyecek şekilde yapılandırılmıştır. Web Sayfaları içindeki diğer .cshtml dosyalarının genellikle göz atılabilir olması gerekir. Bunlar .asp veya .php dosyalarına eşdeğerdir.

ASP.NET ekibi, Web Sayfalarının ASP.NET geliştirme içinde, başlangıçta MVC'ye geçişe yol açması gereken (devam etmek isteyenler için) bir başlangıç ​​noktası olduğunu belirtti. Bunun bir kısmı, Web Sayfalarından MVC'ye geçişin mümkün olduğunca kolay olması gerektiği anlamına gelir. Sonuç olarak, Web Sayfalarında oluşturulan adlandırma kurallarını MVC Razor dosyalarına taşımak mantıklıdır.

Yani orada olduğunu bir alt çizgi ile dosya adlarını prefixing için teknik bir nedeni - bu sadece MVC ile ilgili değildir.

[GÜNCELLEME Ekim 2018]

Yeni ASP.NET Çekirdek Razor Pages çerçevesinde (sürüm 2.1 dışında), başlangıçta yollar oluşturulurken @page(normalde onları yönlendirilebilir bir Razor sayfası haline getirecek olsa bile) önde gelen alt çizgiye sahip dosyalar yok sayılır. . Bu nedenle, bir Razor Pages uygulamasında göz atılacak şekilde tasarlanmamışsa, düzeni ve kısmi dosyaları alt çizgiyle adlandırmak mantıklıdır.


6
Teşekkürler. Benim için bu en anlayışlı cevap. Razor'un MVC'ye bağlı olduğu yanlış anlaşılırdım. Şimdi alt çizginin nedeninin doğrudan ASP.NET Web Sayfaları altında sunulmasını önlemek olduğunu görüyorum.
11:53

1
Aslında bağlı bir işlevselliğe sahip bir adlandırma kuralı, MS'in daha iyi bileceğini düşündüm. Ve şimdi temiz bir sayfa olması gereken MVC'ye taşındı.
Boris B.

Umarım mevcut .NET Framework 4.5.1 ve "One ASP.NET" işlevselliği de dahil olmak üzere Visual Studio 2013 sürümlerinden sonra nihayet bu teknik sınırlamalardan / sabit kodlamadan uzaklaşabilirler. Şimdiye kadar paylaşılmamış standart dosyalara sahip olmak elbette * .config, APP_Code ve APP_Data dizinlerinde olduğu gibi önemlidir. Ancak bu mantık geçersiz kılınabilmesi için bir yerde bir yapılandırma dosyasında (varsayılan olarak makine yapılandırması) yer almalıdır. Ayrıca ortak sayfaların bu varsayılan adları yapılandırılabilir olmalıdır (Düzen / Hata / vb ...).
Tony Wall

1
@ Daniel Oh, ne demek istediğini anlıyorum. Cevabı, ilan edildiği gibi çalışmadığı için düzenledim.
Mike Brind

1
@Daniel Gördüğün şey Razor Pages 2.1'de ortaya çıkan bir hatadır. 2.2'de düzeltilmesi planlanıyor. 2.0'da açıkladığım gibi çalışıyor.
Mike Brind

12

Ruby on Rails böyle yapar (Partials bir _ ile başlar, ancak Kısmi Render çağrısı _ içermez) ve ASP.net MVC ondan büyük ilham aldı.

Gerçekten teknik bir neden yok, sadece diğer geliştiricilere (ve 6 ay sonra kendinize) niyeti açıkça gösterme konvansiyonu: Bu kısmi bir görüştür.


bu, yukarıdaki cevabın işaret ettiği gibi yanlıştır - alt çizginin bir güvenlik işlevi vardır.
iJungleBoy

1
@iJungleBoy Kabul edilen cevaba bakınız. ASP.net MVC için (bu soru hakkında), herhangi bir güvenlik işlevi yoktur. Görünümler klasöründe alt çizgi olsun ya da olmasın tüm cshtml ve aspx dosyalarını engelleyen web.config dosyasına bakın ( System.Web.HttpNotFoundHandleronlar için kurulur ).
Michael Stum

7

Tarayıcınızdan gelen doğrudan istekler ile gösterilemeyen sayfaların (kalıp sayfalar, kısmi görünümler vb.) Adlarının başında alt çizgi (_) bulunur.

Yani _Layout.cshtml (bu ana sayfa) için istekte bulunmaya çalışırsanız sunucudan bir hata alırsınız.

Razor view motorunda, tek başına sayfa olarak taranamayan dosyaları ayırt etmenin bir yolu.

Bunu bu şekilde düşünün ... MVC 2'de ... kısmi görünümü ve mastersite'i .master, .ascx ve normal sayfalar .aspx olan diğer taraftan Razor görünümünde ayırt edersiniz ... tüm görünümler .cshtml'dir, bu nedenle kısmi ve ana sayfaları ayırt etmek için bir önek (_) olacaktır. zorunlu bir şey değil, sadece bir "kongre".


4
Ancak bu mantıkla TÜM cs & cshtml dosyalarına alt çizgi eklenmez mi?
richb

tüm dosyaların önek olarak _ olması durumunda, siteniz çalışmaz ... _prefix'e sahip dosyalar normal bir sayfa içinde işlenir ... (kısmi olarak) ve site haritası bir şablondur ... bu nedenle içeriğe sahip olmalıdır görüntülenmek.
Juztin

Bu yüzden bunu denedim ve kutumdaki IIS, Views, dizininden herhangi bir dosya sunmuyor. Statik .html dosyaları bile değil. Yani bunun cevap olduğunu düşünmüyorum.
richb

Juztin: Soru şu: Neden alt çizgiyle başlıyorlar? _Layout.cshtm öğesini Layout.cshtml olarak yeniden adlandırırsam, yine de gayet iyi çalışır. Peki bu sözleşmenin nedeni nedir?
richb

2
Soru, web sayfaları değil, asp.net mvc hakkındadır
fabspro

2

Bildiğim kadarıyla bu basitçe dosyanın amacını tanımlamak için kullanılan bir sözleşmedir; Aslında dosyanın davranışını değiştireceğine inanmıyorum. Çoğu geliştirme bağlamında, bir alt çizginin eklenmesi, ister sınıf ister bu durumda başka bir şablon olsun, "özel" kullanım için amaçlanacak bir şeyi tanımlar.


1

MVC kullanmıyorum, ancak jilet sözdizimini kullanan web sayfalarında, _ öneki genellikle sayfanın bir kullanıcı tarafından değil, diğer sayfalar veya bazı kodlarla erişilmesi gerektiğini belirtir. _Prefix'i içeren bir sayfaya gitmeye çalışırsanız, asp.net sayfaya erişimi engeller. Bu nedenle, bir kullanıcı tarafından doğrudan erişilmemesi gerektiğinden, düzen sayfalarıyla ve bu tür diğer sayfalarla birlikte kullanılır.

Asp.net'teki App_Code klasörü gibi bir şey


@MikeBrind Varsayılan bir ASP.NET MVC projesinde görünümlerin hiçbirine doğrudan 'gezinemez / göz atamazsınız /view; /views/web.configDosya bunu önlemek için ayarlandı. Ancak bir denetleyici eyleminin geri dönmesini engelleyecek hiçbir şey yokturView("_Index", model); . Ben sadece bir görünümün adını _Index.cshtml olarak değiştirerek ve yukarıda yaptığım gibi aramak için eylem değiştirerek yaptım.
Andrew Barber

@MikeBrind Bu soru Web Sayfaları değil, MVC ile ilgilidir. verilen; Bunu orijinal yorumumda belirtmedim.
Andrew Barber

@MikeBrind Bu yanıta yanıt veriyordum - ve duyuyorum . Senin değil. Benim ilk yorum yanıltıcı (ben de olsa "kısmi" bahsetti mi), bu yüzden sildim. Demek istediğim, alt çizgilerin MVC'de bir görünüm yükleyememesi ile ilgisi yok. Bu kullanıcı "MVC kullanmıyorum" demeye başladı, ancak bu soru MVC ile ilgiliydi. Sadece birisinin bu cevabı okuduktan sonra bir şekilde alt çizginin bir denetleyicinin bir görünümü yükleme yeteneğini etkilediğini düşünmediğinden eminim . Önemli değil. Nasıl konuştuğum konusunda beceriksiz olduğumu kabul ediyoruz. Bitti.
Andrew Barber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.