2011-12-15 26 views
0

私はASP.NET MVC 3アプリケーションで作業していますが、私は一般的にはMVCの方が新しいです。ASP.NET MVC 3 - レイアウトの部分ビューにデータを渡す

データを渡す必要がある私のアプリケーションレイアウトビューに部分的なビューがあります。これはすべてのページに表示されます。これを行う方法はありますか?サイト全体のすべてのアクションのビューモデルにそのデータを読み込む必要はありませんか?

ユーザーがMysite/admin/settingsにナビゲートすると、レイアウト上の部分的な表示が必要なデータを受け取ることができるようにしたいのですが、設定アクションにコードを挿入する必要はありませんAdminコントローラで

この同じノートでは、どのようにアプリケーションのレイアウトビューにデータを渡すのですか?

+0

[レイアウト内のPartialViewにデータを渡す方法は?](http://stackoverflow.com/questions/7607950/how-to-pass-data-to-a-partialview-in-my-レイアウト) – jrummell

答えて

1

このような状況で、私は通常、そのViewModelにから継承し、私の見解ため

public class ApplicationViewModel 
{ 
    public string UserName {get; set;} 
    .... 
} 

public class SettingsViewModel : ApplicationViewModel 
{ 
} 

すべてのあなたの意見をベースViewModelにを使用します。あなたのレイアウトは

同様

それを期待する_layout.cshtml:うまくいけば、これはあなたの質問

+0

申し訳ありません - この投稿はhttp://stackoverflow.com/questions/4154407/asp-net-mvc-razor-pass-model-to-layoutは、モデルをベースビューに割り当てるのは悪い考えです。より経験豊富な同僚がそうです。Downvoting –

+2

@CrabBucketこれは制約を追加するので、同じレイアウトを使用するすべてのビューに対して 'ApplicationViewModel'を継承する必要があります。それがあなたと一緒に暮らすことができない制限であれば、これはあなたが使うことができる解決策ではなく、単純なものです。私たちはいつもトレードオフをします。経験豊富なプログラマーとして、各状況をいつ評価し、何が効果的で何が効果がないのかを判断する必要があります。あなたは生きていて、あなたは学びます:) –

1

パーシャルのみがビューをレンダリングします。手動でモデルを提供する必要があります。

ビューのアクションを作成し、Html.Action(actionName)でレンダリングすることができます。


menuビューに提供されるモデルを作成する例menuのためのアクションを行います。

どこからでも@Html.Action("menu")を呼び出すと、自律的にレンダリングされます。あなたはまた、サイト全体のマスターレイアウトを使用しないようにビューにLayout = null;を設定することをお勧めします

あなたはofcourseのだけでなく、コントローラ名を提供し、さらにカスタムrouteDataことができます)。

+0

これを展開してください。可能であれば良い解決策だと思われますが、私はあなたの投稿から続行するには十分ではありません。例を共有したり、例とリンクしたりできますか?ありがとう。 – jdavis

0

に答える

@model ApplicationViewModel 
.... 

<h1>hello @Model.UserName</h1> 

これは私が私のレイアウトページから部分ビューに値を渡す方法です:

レイアウトページコード:

Html.RenderPartial("_SubMenuLeft", new ViewDataDictionary { {"category", "MMG"} }); 

および私の_SubMenuLeft.cshtml(部分図)

@if (ViewData["category"] == "MMG") 
{ 
    ... 
} 

今後の参考に役立ててください。

関連する問題