_Viewstart.cshtml ve kısmi Jilet görünümlerini kullanmanın doğru yolu?


156

Aynı jilet düzenini otomatik olarak görünümlerime atamak için _viewstart.cshtml kullanıyorum .

Views klasörünün kökünde şöyle görünen ölü, basit bir dosya:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Bu, @Layout yönergesini her bir görünüme eklemekten daha DRY'dir.

Ancak, bu jilet kısmi görünümleri için bir sorun oluşturur , çünkü _viewstart.cshtml içeriğini çalıştırırlar ve bu nedenle kendilerini yanlış bir düzen atarlar, bu da onları artık kısmi yapmaz.

İşte _viewstart.cshtml dosyasını, paylaşılan _layout.shtml dosyasını ve kısmi bir görünümü ("AnonBar.cshtml") gösteren varsayımsal bir proje.

Örnek proje yapısı

Şu anda, bu sorunu aşmanın yolu her kısmi görünüme aşağıdaki satırı eklemektir:

@{
    Layout = "";
}

Bu, Razor'da bir görüşü kısmi olarak göstermenin yanlış yolu gibi görünüyor. (Web formları görünüm motorunun aksine, dosya uzantısının kısmi görünümler için aynı olduğunu unutmayın.)

Düşündüğüm diğer seçenekler ama daha da kötüsü:

  • Tüm kısmi görünümleri ortak bir klasöre koyarak ortak bir _viewstart.cshtml paylaşabilsinler. Bu, görünümlerin denetleyicileriyle aynı klasörde olma kuralını ihlal eder.
  • Kısmi görünümler kullanılmıyor.

Bu, Razor view motor ekibi tarafından hâlâ ortaya çıkan bir şey mi, yoksa temel bir kavram mı eksik?


3
Offtopic için özür dilerim, ancak dosya adlarının yanındaki simgeler nelerdir? :) Bir çeşit kaynak kontrolü değil mi?
Alex

6
@jitbit: VisualSVN
erict

Yanıtlar:


237

return PartialView()Denetleyicilerinizden (yerine return View()) geçerseniz , _viewstart.cshtmlyürütülmez.


6
Aha, PartialViewResultsınıfı bilmiyordu . İhtiyacım olan buydu.
Portman

6
Bir takip olarak, ben de açıkça PartialViewResultnormal yerine eylem yönteminin dönüş türünü ayarlamak gerektiğini buldum ActionResult.
Portman

2
@Portman, eylem yönteminin dönüş türü olmadığında sorunlar görüyor ActionResultmusunuz? MVC çalışma zamanı bu durumda farklı davranmamalıdır çünkü bu bir sorun olduğuna şaşırdım (yani eylem yöntemi tarafından döndürülen türü ActionResultveya onlardan türetilmiş herhangi bir sınıf sürece sadece çalışması gerekir).
marcind

@marcind w3wp.exe üzerinde bir dönüş taşması alıyorum dönüş türünü ActionResult . Dönüş türü ise iyi çalışır PartialViewResult. Bir Connect hatası dosyalamam gerektiğini mi düşünüyorsunuz?
Portman

Bana biri gibi geliyor - bir Connect hatası gönderirseniz geri bağırın, oy verin.
Dav
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.