2013-09-27 12 views
8

çocuk görünümünden paylaşılan düzen üst div için sınıf ekleyin ancak belirli sayfalarda, "tam genişlik" sınıfını, tüm sayfanın genişliğini doldurabilen bu kaba eklemek istiyorum. Bu özel durumda, görünüm, büyük bir çalışma alanı gerektiren bir Javascript uygulamasını barındıracak olmasıdır.MVC jilet benim paylaşılan düzende bir içeren div sahip (tamamen sıradışı değil) durumdayım

Bunu jQuery ile yapabilirdim, ancak sayfa oluşturulduktan sonra olmasını istemiyorum, ideal olarak Razor bu sınıfı kapsayıcıya ekleyebilir.

Paylaşılan mizanpajın içeriğini bir görünüm içinde etkilemenin bir yolu var mı? renderSection ihtiyacım olana oldukça yakın hissettiriyor ama bir sınıf niteliğindeki bir bölümü tanımlamak sadece bir sınıf ismini tanımlamak için oldukça çılgınca olurdu, benzer bir şekilde paylaşılan düzeni çoğaltıyordu ki bu da benzer düzeni çoğaltıyor ...

Bir yol var mı bunu yapmak?

Teşekkür

hack-vari

cevap

8

Tür ama geçmişte kullandım:

_Layout.cshtml

<div class="main-content @ViewBag.ContentCssClass"> 
    @RenderBody() 
</body> 

SomeView.cshtml

@{ 
    ViewBag.ContentCssClass = "full-width"; 
} 

Başka bir karışan çocuklar bir _Layout.cshtml ve _LayoutFull.cshtml ve eklemektir:

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

Bu ya doğrudan görünümünde ya da bu kontrolörün _ViewStart.cshtml dosyada olabilir (ama asla böyle basit bir değişiklik için korumak için iki HTML sayfaları olması gibi) .

+0

akıllıdır.iyi bir cevap –

+0

Mükemmel teşekkürler, Bu soruyu "en iyi uygulama" cevapları olup olmadığını görmek için kısa bir süre için açık tutacak ama bu tam olarak ne aradığım – managedheap84

1

Normalde sayfalar arasında fark yaratmama yardımcı olmak için denetleyicinin adını bir sınıf olarak ekledim. Ben benzer bir durumda bu yaklaşımı kullanmış olduğunuz

public static class HtmlHelperExtensions 
    { 
     public static MvcHtmlString RouteHint<T>(this HtmlHelper<T> htmlHelper, string additionalRouteDataName = "key") 
     { 
      var routeData = htmlHelper.ViewContext.RouteData; 
      var areaName = routeData.DataTokens["area"]; 
      var controllerName = routeData.GetRequiredString("controller"); 
      var actionName = routeData.GetRequiredString("action"); 
      var additionalValue = routeData.Values[additionalRouteDataName]; 
      var className = string.Format("{0} {1} {2} {3}", areaName, controllerName, actionName, additionalValue) 
       .TrimStart() 
       .TrimEnd() 
       .ToLower(); 

      return new MvcHtmlString(className); 
     } 
+0

iyi bir fikir, ben bunu kendim yapmaya başlayacağımı düşünüyorum – managedheap84

0

Colin'in yanıta genişletmek için

Ben bir yardımcıya kullanmak

_Layout.cshtml:

Vücudun CSS sınıfı geçersiz kılmak gereken herhangi görünümlerinde

<body class="@RenderSection("BodyCssClass", false)"> 
:

@section BodyCssClass {@Html.Raw("full-width")} 

Bu böyle basit bir şey için overkill gibi görünüyor, ama benim kitapta iyi bir şeydir ViewBag kullanarak önler.

0

aşağıdaki uzatma yöntemi ile

<body class="@Html.RouteHint()"> 

:

<div class="@ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString().ToLower().Trim()"> 
    @RenderBody() 
</div> 
İlgili konular