На форумах ASP.net было выдвинуто предложение, которое работает.
По сути, если я определяю @section LeftCol в шаблоне моего представления, но не запускаю код, вызывающий RenderSectionв моем макете я получаю сообщение об ошибке, потому что оно не вызывается, когда View.ShowLeftCol имеет значение false.Было предложено добавить блок else и, по существу, выбросить все содержимое в разделе LeftCol.
@if (View.ShowLeftCol)
{
<div id="leftCol">
@RenderSection("LeftCol", false)
</div>
}
else
{
WriteTo(new StringWriter(), RenderSection("LeftCol", false));
}
Основываясь на озабоченности по поводу памяти, я решил также протестировать следующее.Действительно, это также работает.
@if (showLeft)
{
<section id="leftcol">
<div class="pad">
@RenderSection("LeftColumn", false)
</div>
</section>
}
else
{
WriteTo(TextWriter.Null, RenderSection("LeftColumn", false));
}
Кроме того, в верхней части моей страницы это моя новая логика для showLeft / showRight:
bool showLeft = IsSectionDefined("LeftColumn");
bool showRight = IsSectionDefined("RightColumn");
bool? hideLeft = (bool?)ViewBag.HideLeft;
bool? hideRight = (bool?)ViewBag.HideRight;
if (hideLeft.HasValue && hideLeft.Value == true) { showLeft = false; }
if (hideRight.HasValue && hideRight.Value == true) { showRight = false; }
Кто-то еще сказал, что это не работаетдля них, но для меня это сработало.