2011-12-07 20 views
5

Benim MVC projemde Admin ve İstemci olmak üzere 2 Alan var ve İstemci tarafı için Layout (Dinamik) konfigürasyonu gerekiyor, _ViewStart (istemcide) dosyasında, tüm istemci sayfası için düzen ayarlanacaktır. Biz müşteri düzenini değiştirmek gerekiyorsaDinamik değişiklik MVC'de ViewStart düzen yolu 3

Layout = "~/Views/Shared/_Layout.cshtml"; 

yüzden doğru dosya _ViewStart içinde cshtml dosyasının Düzeni yolunu değiştirebilir? ViewStart dosyasının içinde nasıl değiştirileceğini bulamıyorum veya bu durumda başka bir çözüm var mı. Yardımınızın için

Teşekkür :)

cevap

11

o şey hatırlıyor yardımcı olur. Yani, o miras şeklini değiştirmek orada bir durumun yerleştirerek basit bir mesele olmalıdır:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    if (User.Current.IsAuthenticated) { 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
    } 
} 

sen probaby Temalar bakarak daha iyi olur (ve bir yönetici/kullanıcı tema var) rağmen. Alternatif olarak, _Layout.cshtml'u daha akıllı hale getirebilir ve farklı görünümleri de koşullara göre yönetebilirsiniz.

Ayrıca Bakınız: Sen İçiçe Layouts'u yararlanabilirsiniz MVC3 Razor - Is there a way to change the Layout depending on browser request?

6

Sorunuz size tam bir kod örneği vermek için yeterli bilgi var.

Ama sen yönetici belirlemek ya da değil, biz daha fazla yardım sağlayabilir nasıl bize göstermek Eğer bu

if (InsertIsAdminLogicHere) { 
    Layout = "~/Views/Shared/_AdminLayout.cshtml"; 
} else { 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

yapabilirsiniz Javascipt.

umut bu @{ ... }kodu olarak kabul edilir içinde

0

. Bir temel denetleyici oluşturun ve tüm denetleyicileri bu sürücüden sürün.

public class ControllerBase : Controller 
{ 
    public ControllerBase() 
    { 
     ViewBag.Theme = "~/Views/Shared/Default/Views/_Layout.cshtml"; 
    } 
} 

public class HomeController : ControllerBase 
{ 
    public ActionResult Index() 
    { 

     return View(); 
    } 
} 

_ViewStart.cshtml

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

Görüntüleme (bu dosyada herhangi bir değişiklik yapmayın)/Ortak/_Layout.cshtml Asp.NET MVC Bu varsayılan Düzen dosyası. Bunu boşalt ve bu satırları değiştir.

@{ 
    Layout = ViewBag.Theme; 
} 

@RenderBody() 

Bu yol için Alanları değiştirebilirsiniz. Etkin şablon bilgilerini BaseController'da veritabanından veya istediğiniz yerden getirebilirsiniz. Btw

, Views'tan ThemeableRazorViewEngine

0

için ~/Görüntüleme klasör arama dışında görüşlerinizi koymak istiyorsanız/_ViewStart.cshtml

@{  
object multiTenant; 
if (!Request.GetOwinContext().Environment.TryGetValue("MultiTenant", out multiTenant)) 
{ 
    throw new ApplicationException("Could not find tenant"); 
} 
Layout = "~/Views/"+ ((Tenant)multiTenant).Name + "/Shared/_Layout.cshtml"; 
} 
İlgili konular