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

问题描述 投票:0回答:7

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

当前网络请求执行过程中出现未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

如何解决这个错误

.net asp.net-mvc-5
7个回答
22
投票

在我添加后的情况下

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

到共享布局的页脚,一切正常。发生这种情况是因为布局页面上

查看 -> 共享

还没有加载方法

@RenderBody()
所以你可以使用上面的代码片段摆脱这个或者你可以只评论相关cshtml页面顶部的布局。


3
投票

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

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

2
投票

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

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

然后你就错了。这是局部视图,所以你应该这样返回:

返回 PartialView();

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


1
投票

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

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


0
投票

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

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

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;
    }
}

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

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

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

重要节点:默认情况下,Tag Helper Components 仅对 head & body 元素进行操作。

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

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

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

谢谢


0
投票

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


0
投票

在我发布之前我一直收到这个错误我不小心在页面到达

return;
行之前留下了一个
@RenderBody()
电话。

© www.soinside.com 2019 - 2024. All rights reserved.