忽略razor _layout.cshtml中的renderbody [英] ignore renderbody in razor _layout.cshtml

查看:140
本文介绍了忽略razor _layout.cshtml中的renderbody的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个页面,其中显示了您需要登录才能看到的内容.所以我想尝试这段代码:

I have a page for what u need to be signed in to watch it. So I want to try this code:

<!DOCTYPE html>
<html lang="de">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta charset="utf-8" />
    <title>@ViewBag.Title - Meine ASP.NET MVC-Anwendung</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <meta name="viewport" content="width=device-width" />
    @Styles.Render("~/Content/css")
    @if (!Request.IsAuthenticated) {
        @Styles.Render("~/Content/signin")
    }
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    @if (Request.IsAuthenticated) {
        <header class="navbar navbar-fixed-top" role="banner">
            <div class="container">
                <div class="navbar-header">
                    <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="../">Home</a>
                </div>
                <nav class="collapse navbar-collapse bs-navbar-collapse" role="navigation">
                    <ul class="nav navbar-nav">
                        <li class="active">
                            <a href="#">Link 1</a>
                        </li>
                        <li>
                            <a href="#">Link 2</a>
                        </li>
                        <li>
                            <a href="#">Link 3</a>
                        </li>
                        <li>
                            <a href="#">Link 4</a>
                        </li>
                        <li>
                            <a href="#">Link 5</a>
                        </li>
                    </ul>
                </nav>
            </div>
        </header>
        <div id="body">
            @RenderBody()
        </div>
    } else {
        @RenderBody()
    }
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/bootstrap")
    <footer>
        <p>&copy; @DateTime.Now.Year - Meine ASP.NET MVC-Anwendung</p>
    </footer>
</body>
</html>

但是当我开始时,我得到了这个异常

But when I start this I get this exception

The RenderBody-Method wasn't called for the layoutpage "~/Views/Shared/_Layout.cshtml"

如何使剃刀忽略RenderBody方法?

How can I make razor ignore the RenderBody-method?

推荐答案

请注意,如果您确实愿意,您实际上可以忽略"该内容.通常,您在视图代码中编写@RenderBody(),该代码评估主体内容,将其粘贴在HelperResult中,然后将其写入输出流.这样,MVC会将主体标记为已渲染.您可以通过写@{ RenderBody(); }(注意括号)或RenderBody();(如果已经在代码上下文中)欺骗它,以使认为主体已渲染而无需实际编写任何内容.这样可以评估主体内容,而无需实际将其写入输出流.

Note that you actually can "ignore" the content if you really want to. Normally you write @RenderBody() in your view code, which evaluates the body content, sticks it in a HelperResult, and then writes that to the output stream. In doing so, MVC marks the body as having been rendered. You can trick it into thinking the body has been rendered without actually writing anything by writing @{ RenderBody(); } (notice the braces) or just RenderBody(); if already in a code context. This evaluates the body content without actually writing it to the output stream.

这篇关于忽略razor _layout.cshtml中的renderbody的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆