2014-04-03 34 views
5

To wydaje się bardzo dziwne dla mnie, jeśli zrobięRazor: Render nie działa wewnątrz bloku kodu

@RenderSection("scripts", required: false) 

to działa perfekcyjnie, ale jeśli to zrobię

@{ 
    RenderSection("scripts", required: false); 
} 

następnie sekcję scripts nie zostanie wyrenderowany i otrzymam "Następujące sekcje zostały zdefiniowane, ale nie zostały wyrenderowane dla strony układu" ~/Views/Shared/_Layout.cshtml ":" skrypty "." błąd

Każdy pomysł, dlaczego RenderSection/Script.Render nie może znajdować się wewnątrz bloku kodu?

Edit: Próbowałem umieścić punkt przerwania wewnątrz bloku kodu i punkt krytyczny jest trafiony podczas wczytywania strony, a metoda RenderSection wykonuje bez wyjątku

Odpowiedz

4

RenderSection nie pisać nic. Zamiast tego metoda zwraca wartość HelperResult, która implementuje IHtmlString i może być wyświetlana na stronie przy użyciu jej metody WriteTo.

@{ 
    HelperResult renderSection = RenderSection("scripts", required: false); 
    renderSection.WriteTo(Output); 
} 

Podczas korzystania @RenderSection to automatycznie czyni to na stronie

+0

więc oznacza to, @ i @ {} składnia są rzeczywiście różne w jakiś sposób? – Steve

+1

@Steve są bardzo różne. @ {} jest blokiem kodu, @ nie jest –

+0

'@ RenderSection' i' @ (RenderSection) 'są odpowiednikami, ale' @ {RenderSection} 'jest całkowicie inny. – meziantou

Powiązane problemy