2017-12-27 77 views
0

我試圖設置一個主頁面layout.cshtml,該頁面除了一個或兩個(通常是登錄和註銷)以外的所有頁面一致地工作。在我的佈局中,我想展示一些我不希望爲這些特殊頁面顯示的元素。asp.net核心從內容頁面傳遞數據到佈局

我已經看過部分視圖和部分,它們似乎都以我想要的方式「向後」工作 - 在這種情況下,我希望默認爲「顯示所有元素」,但對於我想要的特殊頁面能夠關閉一個元素。

我以前見過使用PageData將變量傳遞給佈局的代碼(這看起來非常有用,因爲我可以在相關頁面中打一個布爾並在佈局中檢查它),但是這似乎已被刪除。有沒有其他的方式工作,而不涉及控制器或更新每一頁來顯示我想隱藏在1頁上的位?

回答

1

有很多不同的方法可以實現這一點。如果您只想「關閉」頁面的某個區域,最簡單的方法可能是ViewData。喜歡的東西:

_Layout.cshtml

@if (ViewData["ShowThis"] as bool? ?? true) 
{ 
    <!-- HTML here --> 
} 

這將導致其默認爲true(顯示HTML)如果ViewData關鍵是沒有定義,那麼在隨後的意見要禁用它,你只需將它定義爲false

SomeView.cshtml

@{ 
    ViewData["ShowThis"] = false; 
} 

或者,您可以使用部分。這將使您可以選擇用其他方式替換HTML。

_Layout.cshtml

@if (!IsSectionDefined("Foo")) 
{ 
    <!-- HTML here --> 
} 
else 
{ 
    @RenderSection("Foo", required: false) 
} 

然後,在你看來,你只需定義部分。如果你想顯示什麼,你可以把它定義爲空:

SomeView.cshtml

@section Foo {} 

或者你可以可以居然把東西在裏面,以取代區域:

@section Foo 
{ 
    <!-- alternate HTML here --> 
} 
+0

謝謝,我現在正在使用後一種方法,並渲染一個空白部分聞起來有點。我嘗試過使用ViewData,但是如果我錯過了null,那麼你的默認提示是。乾杯。 – gbjbaanb

相關問題