ASP.NET MVC - 在布局中有条件地渲染部分
Posted
技术标签:
【中文标题】ASP.NET MVC - 在布局中有条件地渲染部分【英文标题】:ASP.NET MVC - Render section conditionally in Layout 【发布时间】:2013-10-11 07:19:27 【问题描述】:我的 _Layout.cshtml 中有以下代码:
@if (SiteConfig.Instance.HasCustomMarkup)
@RenderSection("bodyPart1", false)
@RenderBody()
@RenderSection("bodyPart2", false)
else
<div id="mainContainer">
@RenderBody()
</div>
所以我尝试仅在某些条件下渲染部分。但这不起作用,我有一个例外:
The following sections have been defined but have not been rendered for the layout page ...
mvc 中是否有任何解决方法用于此目的? 谢谢!
【问题讨论】:
【参考方案1】:为防止出现 The following sections have been defined but have not been rendered...
异常,您可以只模拟渲染调用而无需实际渲染。
@if (SOME_CONDITION)
@RenderSection("SectionName", false)
else
var fakeSectionRender = RenderSection("SectionName", false);
if (fakeSectionRender != null)
fakeSectionRender.WriteTo(TextWriter.Null);
要考虑的缺点是性能,因为这种方法即使在不需要时也会强制渲染。
【讨论】:
请注意,在 Visual Studio 中,如果您使用的是 BrowserLink,这将导致错误提示“SectionName”已被渲染。奇怪的错误,很难追查。否则,此解决方案效果很好。【参考方案2】:只需检查部分是否存在,即:
@if (IsSectionDefined("bodyPart1"))
@RenderSection("bodyPart1")
【讨论】:
感谢您的回复!在我的情况下,它总是被定义。但我找到了可行的解决方案 - 将部分定义包装到以上是关于ASP.NET MVC - 在布局中有条件地渲染部分的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET MVC 中使用 jQuery 渲染局部视图