Csharp/C#教程:RenderSection()内部部分与母版页分享


RenderSection()内部部分与母版页

我在主页面(布局)中添加了部分“侧边栏”,在我正在使用的部分内部:

@RenderSection("SearchList", required: false) 

在其中一个使用我正在做的母版页的视图中:

 @section SearchList { // bunch of html } 

但它给了我错误:

无法直接请求文件“〜/ Views / Shared / _SideBar.cshtml”,因为它调用“IsSectionDefined”方法。

这有什么不对?

Razor目前不支持您尝试做的事情。 节仅在视图页面及其直接布局页面之间起作用。

在创建布局视图时,您可能希望将某些部分分别放入部分视图中。

您可能还需要渲染需要放入其中一个局部视图的标记中的节。 但是,由于部分视图不支持RenderSection逻辑,因此您必须解决此问题。

通过将“布局”页面中的RenderSection结果作为局部视图的模型传递,可以在局部视图中渲染节。 您可以通过在_Layout.cshtml中放置这行代码来完成此操作。

_Layout.cshtml

 @{ Html.RenderPartial("_YourPartial", RenderSection("ContextMenu", false));} 

然后在_YourPartial.cshtml中,您可以在_Layout视图的Html.RenderPartial调用中呈现作为模型传递的部分。 您检查模型是否为空,以防您的部分不需要。

_YourPartial.cshtml

 @model HelperResult @if (Model != null) { @Model } 

用剃刀助手可以解决这个问题。 它有点优雅 – hacky™,但它为我做了工作。

因此在父视图中定义一个帮助器:

 @helper HtmlYouWantRenderedInAPartialView() { Attention! } 

然后,当您渲染部分时,将此助手传递给它

 @Html.Partial("somePartial", new ViewDataDictionary { { "OptionalSection1", (Func)(HtmlYouWantRenderedInAPartialView) } }) 

然后在局部视图中,你可以像这样调用这个帮助器

 
@ViewData.RenderHelper("OptionalSection1")

最后,您需要使用此扩展方法来简化“调用”部分

 public static HelperResult RenderHelper(this ViewDataDictionary viewDataDictionary, string helperName) { Func helper = viewDataDictionary[helperName] as Func; if (helper != null) { return helper(); } return null; } 

所以重点是传递这个帮助器的委托,然后当子视图调用它时,内容会在你想要的地方呈现。

子视图的最终结果如下所示

上述就是C#学习教程:RenderSection()内部部分与母版页分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 
Attention!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/942290.html

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐