2011-01-19 3 views

Odpowiedz

45

Odpowiednikiem symboli zastępczych zawartości w maszynce Razor są sekcje.

W swojej _Layout.cshtml:

<head> 
@RenderSection("Styles", required: false) 
</head> 

Następnie na stronie partnerskiej:

@section Styles { 
    <link href="@Url.Content("~/Content/StandardSize.css")" /> 
} 

Alternatywnym rozwiązaniem byłoby umieścić swoje style w ViewBag/ViewData:

W twoim _Layout.cshtml:

<head> 
    @foreach(string style in ViewBag.Styles ?? new string[0]) { 
     <link href="@Url.Content(style)" /> 
    } 
</head> 

A na stronie partnerskiej:

@{ 
    ViewBag.Styles = new[] { "~/Content/StandardSize.css" }; 
} 

To działa, ponieważ strona widok zostanie wykonany przed układem.

+2

Jest to również świetny sposób dodawania określonych odniesień do skryptu do głowy. – ReinierDG

+0

Alternatywne rozwiązanie jest dobre dla osób, które nie przekonały swojego rozwiązania do korzystania z maszynki Razor. Dzięki! – Mayo

-2

Zaskakująco (dla mnie) asp: ContentPlaceHolder działa. Wydaje się jednak bardzo niepoważny. Zastanawiam się, czy jest inny sposób?

Konkretnie, można umieścić w swoim _layout.cshtml <asp:ContentPlaceHolder ID="HeadContent" runat="server" /> i

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    <link href="@Url.Content("~/Content/StandardSize.css")" rel="stylesheet" type="text/css" /> 
</asp:Content> 

w widoku.

+0

Wydaje się tylko, że to działa. Czy spojrzałeś na wygenerowany kod HTML? – marcind

+0

Masz rację. Właśnie zobaczyłem, że style, które chciałem, zostały zastosowane, ale nie sprawdziłem kodu HTML. Zastanawiam się, jak przetwarzano znacznik serwera przy pomocy Razor. – JohnOpincar

Powiązane problemy