Tüm Alanları aynı Düzeni kullanmaya zorla


88

Aşağıdaki proje yapısına sahibim:

  • / Görünümler / Paylaşılan / _Layout;

  • / Alanlar / Alan1 / Görünümler / DenetleyiciAdı / Dizin;

...

  • / Alanlar / AlanN / Görünümler / DenetleyiciAdı / Dizin.

Tüm alanları _Layout'u temel düzen olarak kullanmaya zorlamanın bir yolu var mı ?

_ViewStart dosyasını eklemeden bunu yapmanın bir yolu var mı (örneğin, yönlendirme yapılandırması aracılığıyla)?

Ayrıca bakınız:

ASP.NET MVC 3 jilet ViewStart dosyasında farklı Layouts'u nasıl belirtebilirim?


Yanıtlar:


157

Sadece şu adla bir dosya eklemelisiniz:

_ViewStart.cshtml

Her alan görünümleri klasörünün altında:

/Areas/Area1/Views/_ViewStart.cshtml

Ve dosyayı şu şekilde kök düzenine işaret edecek şekilde düzenleyin:

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

Bunun çalışması için, görünümün layout özelliğinde bir değer belirtmeniz gerekmez, bunu yaparsanız, genel düzeni geçersiz kılarsınız.

Not: Tony'nin bahsettiği gibi, her bir görünümün layout özelliğini kök düzenine işaret edecek şekilde düzenleyebilirsiniz, ancak bu, görünümlerinizi düzeninizle birleştireceğiniz ve değiştirmek zahmetli olacağı için bunu yapmanın önerilen yolu değildir.

Düzenle 1

Varsayılan görünümün düzenini ayarlamak için kod kullanmak isterseniz, belki de özel bir görünüm motoru yazmayı düşünmelisiniz.

Özel hakkında google'ı deneyin RazorViewEngineveRazorView

Bu makale iyi bir başlangıç ​​noktası olabilir

http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx

Ben böyle bir şey yapmadım ama umarım seni doğru yöne yönlendiriyorum


1
"_ViewStart" dosyası eklemeden bunu yapmanın bir yolu var mı (örneğin, yönlendirme yapılandırması aracılığıyla)?
Mikhail

2
Yönlendirme içinde ben öyle düşünmüyorum. Onlar iki farklı şeydir. Yönlendirme, geçerli istek URL'sini RoutesTable'da kayıtlı bir yolla eşleştirmeye çalışmaktan sorumludur, bir eşleşme bulunduğunda, bir IMvcRouteHandler oluşturulur ve ardından denetleyicinizin eylemini işlemek için bir IHttpHandler (MvcHandler) sorumludur. Gördüğünüz gibi, bunun görünümler veya düzenlerle ilgisi yok. Bunun nedeni, bir rotanın bir görünüm döndürmesine gerek olmaması, json veya xml döndürebilmesidir. Dolayısıyla yönlendirme böyle bir şeyi uygulamak için doğru yer değildir.
Jupaol

_ViewStartTüm alanlara uygulamak için doğrudan Alan klasörüne de ekleyebilirsiniz .
Artur

21

Jupaol'un cevabını genişletmek ...

En azından VS2013'te, alan oluşturulurken _ViewStart.cshtml dosyası varsayılan olarak eklenir, böylece zaten oradadır ve içeriği _Layout.cshtml köküne işaret edecek şekilde not alırken değiştirebilirsiniz. Artık kullanılmadığından (ve şu anda potansiyel bir kafa karışıklığı kaynağı olduğundan) alandaki _Layout.cshtml dosyasını kaldırabilirsiniz

Ancak, böyle yaparak, o kök _Layout.cshtml'de gerçekleştirilen herhangi bir yönlendirmenin alanları dikkate alması gerekecektir.
Varsayılan _Layout.cshtml, küçük bir değişikliğe ihtiyaç duyan bir dizi ActionLink yardımcılarına sahiptir:

Area = "" ayarını yaparak herhangi bir ActionLink çağrısına RouteValueDictionary parametresini ekleyin. Boş dizenin kök düzeyini ifade ettiğini unutmayın. Bu, bu bağlantıların bir alandan çağrıldığında doğru çalışmasına izin verir, yine de kökten çağrıldığında çalışır.

Örneğin:

<li>@Html.ActionLink("Home", "Index", "Home", new { Area = "" }, null)</li>

2

Şunları kullanarak bir düzen belirtirsiniz:

@ {Düzen = "_Layout"; }

Bunu bir kerede değiştirmeyi kolaylaştırmak istiyorsanız. Belki bunu bir görünüm çantası değişkeni olarak ayarlayabilir ve kontrol cihazına verebilirsiniz. Daha da kolaylaştırmak için, diğer denetleyicilerin miras aldığı bir temel denetleyici oluşturabilir ve düzeni oradaki görünüm çantasına atamasını sağlayabilirsiniz.

Yönlendirmenin neden değişmesi gerektiğinden emin değilim veya belki de anlamıyorum. Bu yardımcı olur umarım :)

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.