2013-12-10 147 views
0

我有一個佈局頁面,並且目前有一個頁面使用該佈局。我想要在頁面上顯示或隱藏部分頁面。如果它隱藏,則需要調整其他樣式更改,如主內容div的寬度。下面是我非工作在這個嘗試:從子頁面呈現控件佈局

佈局頁

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    ViewBag.ShowTree = true; 
} 

<div class="row"> 
    @if(ViewBag.ShowTree){ 
    <div class="col-md-2"> 
     @Html.Action("ItemTree") 
    </div> 
    } 
    <div class="@(ViewBag.ShowTree ? "col-md-10" : "col-md-12")"> 
     @RenderBody() 
    </div> 
</div> 

子頁面

@{ 
    ViewBag.Title = "Edit"; 
    Layout = "~/Views/Shared/_NestedLayout.cshtml"; 
    ViewBag.ShowTree = false; 
} 

在這種情況下爲ShowTree值設置爲true,佈局頁面呈現,然後孩子將其設置爲false,並呈現內容。基於MVC的頁面生命週期,這非常有意義。但當然不是我想要它如何工作。

我知道我可以在控制器中設置這個值,而不是將它設置在佈局/網頁中,但是我希望如果我可以將它設置爲純粹的設計,並且保持它不在控制器。

我的偏好是它根本不會調用該操作,而不僅僅是使用JavaScript隱藏數據。

回答

0

我喜歡你的方法,但如果這不起作用,唯一的其他機制我可以認爲子視圖可​​以控制佈局的位置將使用@section。不理想,但應該工作。

佈局頁:

<div class="row"> 
    @RenderSection("ItemTreeSection", required: false) 

    <div class="@(ViewBag.ShowTree ? "col-md-10" : "col-md-12")"> 
     @RenderBody() 
    </div> 
</div> 

子視圖:

@section ItemTreeSection { 
    <div class="col-md-2"> 
     @Html.Action("ItemTree") 
    </div> 
} 
+0

所以我就必須同時使用部分和標誌...不理想,但它可能會工作,我想。 – Peter

+0

Arghhh,我沒有注意到你也在使用該標誌來顯示不同的網格列。現在我不喜歡我的解決方案。 –