【问题标题】:How to render a section from partial view into the layout如何将部分视图中的部分渲染到布局中
【发布时间】:2014-05-27 03:32:24
【问题描述】:

我正在尝试在部分渲染中生成元标记。问题是我无法渲染一个部分。我尝试了网上提供的各种建议。下面是场景。

_Layout.cshtml

@RenderBody()
  • 在部分渲染之外渲染主体

MainView.cshtml

@{
    Layout = "/Views/News/Shared/_Layout.cshtml";
}
  • 有部分效果图

显示.cshtml - 内部有部分渲染图和 HTML - 还包含我需要在 _Layout 中提供的元数据代码

以下是我尝试过的: 场景一: 显示.cshtml

{
@section main
{...}
}

MainView.cshtml

{
@section main
{
@RenderSection("main", false)
}
}

_Layout.cshtml

{
@RenderSection("main", false)
}

结果:MainView抛出异常... asp.net mvc不能直接请求,因为它调用了“RenderSection”方法。

场景 2: - 尝试使用 ViewBag 在视图之间交换数据。

@ViewBag.PropertyName = "test value";

结果:@ViewBag.PropertyName 中没有值

场景 3:(这很令人沮丧) - _Layout.cshtml

@section main
{
<div>this is it!!</div>
}

@RenderSection("main", false);

结果:错误.....未定义“main”部分。

在我开始讨论这个问题之前,我对视图/部分视图(非常笼统)没有很好的理解。在这方面工作,我进一步了解了 @RenderPage() @RenderSection() 而且当然 @Html.Partial()

到目前为止,我浏览过的任何基本内容都没有对我有用。有什么我错过的吗?或者有没有我误解的视图之间的父/子关系的任何细节?

任何指向正确方向的指针都会有很大帮助。 :)

干杯!!

【问题讨论】:

    标签: asp.net-mvc razor rendering sitecore asp.net-mvc-partialview


    【解决方案1】:

    在示例中,您似乎到处都有不需要的大括号。当您使用布局时,您还使用术语 PartialView,这意味着它们是视图,而不是部分视图。 PartialView 没有布局/母版页

    要向母版页/布局添加新部分,可以由任何视图提供,您只需要

    在 _Layout.cshtml 母版页中:

    @RenderSection("main", false)
    

    并在 MainView.cshtml 视图中添加 main 部分:

    @{
        Layout = "/Views/3News/Shared/_Layout.cshtml";
    }
    
    <div>Your page content that gets rendered by RenderBody() as it is not in a section</div>
    
    @section main
    {
       <div>Some content to render inside the layout's main section</div>
    }
    

    【讨论】:

    • 感谢您的回复。对不起牙套。我试图了解每个 .cshtml 文件包含的内容。值得一提的是,我使用的是具有自己的渲染模型层的 Sitecore CMS。 MainView 使用他们的渲染模型。此外,进一步深入研究这个问题,我发现了一篇文章,暗示他们的渲染模型不允许部分渲染。我想,我将不得不深入研究他们的渲染模型以“解决”这个问题。您上面的解决方案非常有意义,自过去 2 天以来我一直在尝试做同样的事情。谢谢你的帖子。 :)
    • 啊。这给它带来了不同的光。总是值得在标签中提及 CMS。我现在会调整它们。
    【解决方案2】:

    对于上述问题,我在我的情况下有一个解决方法,但它没有达到目的。无论如何,我将分享我最终是如何实现 RenderSection 的。

    New rendering: Tags.cshtml
    <tags>
    
    MainView.cshtml
    @section tags
    {
     @Html.Partial("Tags.cshtml")
    }
    
    _Layout.cshtml
    @RenderSection("tags")
    

    这使得标签很好。

    现在,我无法共享帮助我构建位于 Display.cshtml 中的标签的变量。

    感谢您的阅读:)

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 2013-06-23
      • 2018-10-21
      • 1970-01-01
      相关资源
      最近更新 更多