为什么在ASP.NET MVC中呈现两次头内容

时间:2014-07-24 06:09:00

标签: asp.net-mvc razor

我有一个非常基本的ASP.NET MVC网站,我无法弄清楚为什么我的标题内容会被渲染两次。

<!-- ViewStart -->
@{
   Layout = "~/Views/Shared/_Layout.cshtml";
}

<!-- _Layout.cshtml -->
<body>
    <div class="container body-content">
        @RenderPage("~/Views/Shared/_Header.cshtml")
        @RenderBody()
    </div>
<body>

<!-- _Header.cshtml -->
@{
    Layout = null;
}
<h1> Header Content</h1>

<!-- View-->
<h2>
    <div class="well">
        Body Content
    </div>
</h2>

我最终得到的是标题内容呈现两次;一次在视图上方,一次在视图中。

enter image description here

呈现来源:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title> - My ASP.NET Application</title>
        <link href="/Content/bootstrap.css" rel="stylesheet"/>

        <script src="/Scripts/modernizr-2.6.2.js"></script>

        <script type="text/javascript">
            window.apiUrl = '';
        </script>
    </head>
    <body>

        <div class="container body-content">
            <h1> Header Content</h1>        
            <div class="document-root" ng-app="AppHome">

                <div ng-view></div>

            </div>
        </div>

        <script src="/Scripts/Vendor/Bootstrap/bootstrap-without-jquery.js"></script>
        <script src="/Scripts/respond.js"></script>
    </body>
</html>

任何想法为什么!?

注1:在浏览导航时,我期待的是:

  • viewstart调用布局页面
  • 布局页面添加页眉布局页面
  • 布局页面将视图插入正文

注意2:从源头可以看出,这是一个Angular App。我已经替换了将使用上面显示的内容呈现的视图 - 这导致上面的图片。但渲染的源不包括第二个H1,所以这意味着第二个H1以某种方式来自角度注入视图

注意3:在真正的问题中,我试图显示一个菜单并显示两次。作为一项完整性检查,我将所有内容剥离到最低限度,如上所示;但仍然没有骰子。

2 个答案:

答案 0 :(得分:1)

在_Layout.cshtml中添加

  

@ {       Layout = null;   }

也许您的Viewstart页面已经提到了适用于每个页面的布局。

注意:页面中包含的视图必须将Layout设置为null,否则将显示Viewstart中提到的布局

答案 1 :(得分:0)

See this Fiddle

您似乎两次渲染<h1> Header Content</h1>@RenderPage("~/Views/Shared/_Header.cshtml")这可能还有<h1> Header Content</h1>代码。

例如

<!-- _Layout.cshtml -->
<body>
    <div class="container body-content">
        <h1> Header Content</h1>      
    </div>
<body>

<!-- _Header.cshtml -->
<h1> Header Content</h1>

<!-- View-->
<h2>
    <div class="well">
        Body Content
    </div>
</h2>