Ho un Page.cshtml simile al seguente (che non funziona):C'è un modo per rendere una @section facoltativa con asp.net mvc Razor ViewEngine?
@{
Layout = "../Shared/Layouts/_Layout.cshtml";
var mycollection = (ViewBag.TheCollection as IQueryable<MyCollectionType>);
}
<h2>@ViewBag.Title</h2>
content here
@if (mycollection != null && mycollection.Count() > 0)
{
@section ContentRight
{
<h2>
Stuff
</h2>
<ul class="stuff">
@foreach (MyCollectionType item in mycollection)
{
<li class="stuff-item">@item.Name</li>
}
</ul>
}
}
Come ho già detto, questo non funziona. Non voglio definire la sezione se non c'è niente nella collezione. C'è un modo per avere qualcosa come questo lavoro? In caso contrario, quali sono le mie altre opzioni? Sono molto nuovo a questo Razor ViewEngine.
Modifica
Nel mio layout ho:
@if(IsSectionDefined("ContentRight"))
{
<div class="right">
RenderSection("ContentRight")
</div>
}
quello che non voglio è il div per l'uscita quando la sezione è vuota.
Sfortunatamente questa è probabilmente la migliore opzione al momento. Un'altra opzione possibile è provare e chiamare direttamente DefineSection, che è ciò che "@section" viene tradotto in. Il problema è che non puoi inserire Markup in un lambda in Razor v2 (qualcosa che stiamo guardando per il futuro), quindi dovrai definire il tuo contenuto in un costrutto @helper e chiamare quell'helper dal lambda DefineSection . Alla fine, potrebbe finire per essere più facile farlo nel modo che hai. Ma guarderemo a migliorare questo nelle versioni future! –