我正在转换 MVC aspx 内容占有者 - >主页到 MVC剃须刀部分 - >布局。
过去我的aspx视图是这样的:
<asp:Content ID="HelpContent" ContentPlaceHolderID="HelpLink" runat="server">
<a href="../../Support" target="HPhelp" title="Open GideonSoft Help">Help</a>
</asp:Content>
主页面没有相应的HelpContent占位符(可能是因为用户未经过身份验证)所有内容都很好(没有HelpContent部分)。
现在当我定义了一个剃刀部分,在布局中没有相应的@RenderSection时,我收到了这个错误:
以下部分已定义但尚未呈现 对于布局页面&#34;〜/ Views / Shared / New.cshtml&#34;:&#34; HelpLink&#34;。
我需要重新设计吗?
如果布局为绿灯指示,我是否可以选择渲染视图的HelpLink部分?
修改
我觉得有些混乱,所以让我重新总结一下:
布局逻辑如下所示:
if (User.IsLoggedIn) {
@RenderSection( "HelpLinks", false);
}
然后用户没有登录,它没有渲染,然后.NET抛出异常,因为布局不知道如何处理该部分。
答案 0 :(得分:1)
您可以通过传递false
作为第二个参数来指示该部分是可选的:
@RenderSection(&#34; HelpLink&#34;,false);
编辑:对于渲染的控制流逻辑,您可以在剃刀视图中使用.NET(如此c#示例):
@if(IsSectionDefined("HelpLink"))
{
@RenderSection("HelpLink", false);
}
或者,如果您想根据用户是否登录进行渲染,您可以使用安全检查替换上述示例中的if逻辑。
编辑2 :
确保您已定义该部分:
@section HelpLink {
//This needs to be defined in any view that uses the layout with the @RenderSection. It can be empty.
}
或者,您可以添加检查以查看该部分是否存在,并仅在所需视图中定义@section:
if(IsSectionDefined(&#34; HelpLink&#34;)&amp;&amp; User.IsLoggedIn){
@RenderSection(&#34; HelpLinks&#34;,false);
}
答案 1 :(得分:0)
如果在剃刀视图中声明了一个部分,则必须在布局中进行渲染。
我在Freeman的Pro ASP.NET MVC 5书中找到了这个。
对我来说似乎是一个糟糕的设计。