【问题标题】:The "RenderBody" method has not been called for layout page "~/Views/Shared/index.cshtml"没有为布局页面“~/Views/Shared/index.cshtml”调用“RenderBody”方法
【发布时间】:2017-01-11 13:01:15
【问题描述】:

没有为布局页面“~/Views/Shared/index.cshtml”调用“RenderBody”方法

在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

如何解决这个错误

【问题讨论】:

标签: .net asp.net-mvc-5


【解决方案1】:

在我添加之后

<div class="container body-content">
    @RenderBody()
    <hr />
    <footer><p>&copy; @DateTime.Now.Year - My ASP.NET Application</p>
    </footer>
</div>

到共享布局的页脚,一切都很完美。这是因为

上的布局页面

查看 -> 共享

尚未加载方法@RenderBody(),因此您可以使用上面的代码片段摆脱它,或者您可以在相关cshtml页面顶部评论布局。

玩得开心编码 干杯...

【讨论】:

    【解决方案2】:

    请将此代码放在页面末尾的“body”关闭标记之前

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
    

    【讨论】:

      【解决方案3】:

      布局页面没有调用“RenderBody”方法

      这通常发生在您: – 有一个局部的看法 – 使用 _ViewStart.cshtml 页面 – 你从你的控制器调用部分视图:return View();

      你错了。这是一个局部视图,所以你应该像这样返回:

      返回部分视图();

      来源:http://www.cloud-developer.eu/blog/2014/01/20/renderbody-method-called-layout-page/

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,我的情况是我使用嵌套布局,您需要为所有 _layout 包含@RenderBody

        阅读此处了解详情:https://forums.asp.net/t/2098873.aspx?The+RenderBody+method+has+not+been+called+for+layout+page+Views+Shared+_Layout+cshtml+

        【讨论】:

          【解决方案5】:

          当我在我的 asp.net 核心 MVC 项目中处理 TagHelperComponent 时,我遇到了同样的错误。我用谷歌搜索了很多,但每个人都有与我不同的问题,并且显然有与我不同的解决方案,例如多个布局文件等。让我解释一下我的问题 -

          我正在制作一个 CopyRight TagHelperComponent,用于将我的版权内容(就在正文结束标记之前)注入到我的应用程序的每个视图中,如下所示 -

          public class CopyRightTagHelperComponent:TagHelperComponent
          {
              public CopyRightTagHelperComponent(string copyrightContent)
              {
                  CopyrightContent = copyrightContent;
              }
          
              public string CopyrightContent { get; set; }
          
              public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
              {
                  if (context.TagName.Equals("body", StringComparison.OrdinalIgnoreCase))
                  {
                      output.Content.AppendHtml(CopyrightContent);
                  }
          
                  return Task.CompletedTask;
              }
          }
          

          但我相信你可以在我上面的代码中找到问题。问题是,我试图错误地将我的版权内容注入正文标签(不是在正文结束标签之前,而是使用 Content 属性)。花了很多时间后,我发现我使用“Content”属性来附加我的内容,而不是 PreContent 或 PostContent 属性,这就是我的错误。

          错误的原因只是,我试图用“内容”属性附加内容。将我的以下行代码从“Content”更改为“PostContent”,已修复错误 -

          if (context.TagName.Equals("body", StringComparison.OrdinalIgnoreCase))
          {
             output.PostContent.AppendHtml(CopyrightContent);
          }
          

          重要节点:默认情况下,标签助手组件仅对头部和身体元素进行操作。

          https://github.com/aspnet/Mvc/tree/65af12f1f575fdaee893e0232416df29bb83d7fa/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers

          为了使它们适用于其他元素,如页脚,我们需要创建一个新的标签助手(在页脚元素的情况下命名为 FooterTagHelper),它将派生自特殊类“TagHelperComponentTagHelper”。作为参考,请参阅下面来自 Microsoft 的代码 -

          https://github.com/aspnet/Mvc/blob/65af12f1f575fdaee893e0232416df29bb83d7fa/src/Microsoft.AspNetCore.Mvc.Razor/TagHelpers/BodyTagHelper.cs

          谢谢

          【讨论】:

            【解决方案6】:

            最后,我找到了这个问题的答案,我遇到了同样的问题并且很容易解决它!转到您的视图文件夹创建 _viewSrart.cshtml - 然后转到您在视图文件夹中的每个视图并删除或评论这( Layout = "~/Views/Home/Index.cshtml";) 它将起作用。稍后谢谢我

            【讨论】:

              猜你喜欢
              • 2016-08-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-04-25
              • 1970-01-01
              相关资源
              最近更新 更多