【问题标题】:ignore renderbody in razor _layout.cshtml忽略 razor _layout.cshtml 中的渲染体
【发布时间】:2013-09-06 01:36:54
【问题描述】:

我有一个页面,您需要登录才能观看它。所以我想试试这段代码:

<!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>

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

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

如何让 razor 忽略 RenderBody 方法?

【问题讨论】:

  • 你不能。你所做的也没有意义。您还应该向未经身份验证的用户显示一些内容..
  • 是的,未经身份验证的用户会得到一个登录表单,如我的代码所示;)
  • 仍然另一个西蒙是对的,你试图做的事情没有意义:它是布局页面,它是从内容页面调用来显示布局内的东西(目标是 drum roll 以获得一致的布局)您需要在某个点或另一个点渲染身体。你想在这里做什么?
  • 我想避免人们在登录之前甚至看到导航。
  • 有道理,那你为什么不告诉 razor 在哪里渲染页面的其余部分?

标签: c# asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

请注意,如果您真的愿意,您实际上可以“忽略”内容。通常,您在视图代码中写入@RenderBody(),它评估正文内容,将其粘贴在HelperResult 中,然后将其写入输出流。这样做时,MVC 将主体标记为已渲染。您可以通过编写@{ RenderBody(); }(注意大括号)或只是RenderBody();(如果已经在代码上下文中)来欺骗它认为主体已被渲染而实际上没有编写任何内容。这会评估正文内容,而不会将其实际写入输出流。

【讨论】:

  • 我实际上不再需要它,但我会接受你的回答,因为它提供了一个实际的解决方案:)
  • 感谢您的提示!我想从视图中显示身体,我可以轻松地将其存储在变量中并在其他地方显示。
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多