2013-06-07 2 views
6

私はMVC4とRazorを使用しており、には、ビュー内からモデルタイプを決定したいと考えています。これは簡単なはずですが、私は正しい構文を得ることができません。私は、私は条件付きでそれが中で使われている現在のビューとモデルに応じて_Layout.cshtmlページに異なるマークアップを表示することができ、これをやりたいMVCでモデルタイプを取得する

それは(と思う)の線に沿って何かでなければなりません。:

@if (Model.GetType() == Web.Models.AccommodationModel) { // Obviously not correct 
     <h1>Accomodation markup here</h1> 
} 

ご迷惑をおかけして申し訳ありません。あなたはすでに私は全体のコンセプトを再考するためにあなたを示唆している答えを持っているが、

@if (Model.GetType() == typeof(Web.Models.AccommodationModel)) { 
    <h1>Accomodation markup here</h1> 
} 

答えて

12

あなたがisキーワードを使用することができます。

あなたがここでやっているのは、一般的なレイアウトを特定のビューに結合することです。これらのビューは今後変更される可能性があり、レイアウトを変更する必要があります。ますます多くのレイアウトが削除されたり、削除される可能性があります。したがって、あなたのアプローチは単一の責任原則を破ります.3つの理由は明らかに_layout.cshtmlを変更する理由の1つです。

このような追加コードが必要なビューに@section SomeSection { <h1>markup</h1> }を挿入し、@RenderSection("SomeSection")を使用してレイアウトにレンダリングするとどうでしょうか?@if(IsSectionDefined("SomeSection"))を希望の場所でチェックしているとしますか?

+0

ありがとうございました。顔を守るために、私は確信しています*上記の2番目の方法を試しましたが、うまくいかなかったのです。私は今それをもう一度試して、それは動作します!タイプミスなどだったのでしょうか?とにかくおかげさまでv。 – WheretheresaWill

4

@if (Model is Web.Models.AccommodationModel) { 
    <h1>Accomodation markup here</h1> 
} 

あるいはまた、(醜い):

+0

ありがとうございます。私はこの方法を使うことも見ていきます。 '_Layout'で行われたモーダルの内容をすばやく修正するためには多くのことがありましたが、まだまだ良い点です。ありがとうございます。 – WheretheresaWill

関連する問題