MVC - 嵌套的部分视图

时间:2015-01-07 16:47:28

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

当我在MVC中嵌套部分视图时,我收到错误(&#34;&#39; <&#39; &#34;中的服务器错误)应用程序。视图可以单独使用,但不能嵌套。我的理解是这样做是可以的,所以我做错了什么?

基本上,我试图在我的_Layout.cshtml中使用partials作为子布局。

这是我的主要布局 - _Layout.cshtml

<!DOCTYPE html>
<html>
<head>...</head>
<body style="padding-top: 80px;">  
    <div class="container-fluid">
        <div class="row">
            <div id="myTab" class="col-lg-12 col-md-12 col-sm-12">
                ...
                <div class="tab-content">
                    <div class="tab-pane fade" id="search">
                       @Html.Partial("~/Areas/Search/Views/Shared/_SearchLayout.cshtml")
                    </div>                   
                </div>
            </div>
        </div>
    </div>
    @RenderBody()
    @RenderSection("scripts", required: false)
</body>
</html>

这是第一个局部视图(_SearchLayout)。如果我删除部分和@RenderBody,没有错误。

<div class="container-fluid">
        @Html.Partial("_PolicySearch")
        @Html.Partial("_ClaimSearch")       
    </div>
@RenderBody()

此局部视图嵌套在第一个局部视图(_SearchLayout)中:

 <div class="row top-buffer search-outline form-horizontal">
        <div class="col-md-1 search-icon-size text-primary">
            <i class="glyphicon glyphicon-heart"></i>
        </div>
        <div class="col-md-1 search-icon-size text-primary">
            <h4>Claim Search</h4>
        </div>    
    </div>

3 个答案:

答案 0 :(得分:1)

使用Html.RenderPartial

答案 1 :(得分:1)

问题是@RenderBody()。这只能在布局中调用,当以这种方式使用时,_SearchLayout.cshtml 不是,尽管它的名称。

要记住ASP.NET MVC中的布局,局部视图和视图,重要的是它们所有视图。区分它们的唯一方法是如何使用它们。在这种情况下,您将_SearchLayout.cshtml视图用作部分视图,而部分视图则不能使用@RenderBody()

答案 2 :(得分:1)

在您的第一个部分视图中:

  1. 删除RenderBody
  2. 将Html.Partial替换为Html.RenderPartial
  3. 我还建议将部分视图重命名为不包含单词&#34; Layout&#34;避免视图类型之间的不匹配。