Tengo un Page.cshtml similar al siguiente (que no funciona):¿Hay alguna manera de hacer que @section sea opcional 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>
}
}
Como ya he dicho, esto no funciona. No quiero definir la sección si no hay nada en la colección. ¿Hay alguna manera de hacer que algo como esto funcione? Si no, ¿cuáles son mis otras opciones? Soy muy nuevo en este Razor ViewEngine.
Editar
En mi diseño que tengo:
@if(IsSectionDefined("ContentRight"))
{
<div class="right">
RenderSection("ContentRight")
</div>
}
lo que no queremos es que el div a la salida cuando la sección está vacía.
Desafortunadamente esa es probablemente su mejor opción ahora mismo. Otra posible opción es tratar de llamar directamente a DefineSection, que es a lo que se traduce "@section". El problema es que no puedes poner Markup dentro de una lambda en Razor v2 (algo que estamos viendo para el futuro), así que vas a tener que definir tu contenido en un constructo @helper y llamar a ese helper desde la lambda de DefineSection . Al final, puede que te resulte más fácil hacerlo de la forma en que lo haces. ¡Pero veremos cómo mejorar esto en futuras versiones! –