2017-12-27 27 views
0

1つか2つのページ(通常はログインとログアウト)以外のすべてのページで一貫して動作するマスターlayout.cshtmlページを設定しようとしています。私のレイアウトでは、これらの特別なページのために表示したくないいくつかの要素を表示したいと思います。asp.net coreコンテンツページからレイアウトにデータを渡す

私は部分的なビューとセクションを見たことがあります。それらはすべて私が望むように "後方に"働くようです - この場合、デフォルトは 'すべての要素を表示'にしたいのですが、要素をオフにすることができます。

PageDataを使用して変数にレイアウトを渡すコードを見たことがありますが(これは関連するページでブールを叩いてレイアウトで確認できるので非常に便利でしたが)、これは削除されているようです。コントローラーを関与させたり、すべてのページを更新して、ちょうど1ページに隠したいビットを表示することなく動作する他の方法はありますか?

答えて

1

これを達成するにはさまざまな方法があります。単にページの領域を「消す」場合は、最も簡単な方法はおそらくViewDataです。ような何か:

_Layout.cshtml

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

これはViewDataキーが定義されていない場合、それはtrue(HTMLを表示)をデフォルトになりますので、その後、あなたの意見に無効にしたい場所それ、あなただけ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

関連する問題