2012-04-24 16 views
0

私はこれを達成する方法がわかりませんので、私はそれについていくつかの勧告をしたいと思います。私が達成しようとしているのは、基本的には(私は純粋なMVC3.Netを使用しています)、特定のセッションが開始または終了するたびにレイアウトページのhtmlを変更することです。これは、ユーザーがプロジェクトの詳細(プロジェクトがエンティティ)に入ると、メインメニューにさらに多くのオプションを表示するという要件に基づいていたという考えです。さらに、オプションはユーザーのタイプによって異なります。セッションMVC3に基づいてメニューを変更してください

少しの研究をした後、私はプロジェクトが選択されるたびに作成するセッション開始のイベントをキャッチするというアイデアを思いつきましたが、セッションが開始されたとき、終了し、htmlを変更します。

これを達成するにはどうすればよいでしょうか?

答えて

0

短い例です。たぶん、あなたはhttps://github.com/maartenba/MvcSiteMapProviderから動的なサイトマップの機能を使用してタスクを解決することができます。

このプロバイダを使用したくない場合は、すべてのビューモデルでBaseViewModelを使用し、そこにプロジェクトステータスを保存することをお勧めします。 ですから、このような何か行うことができます。このサイトマッププロバイダのことを聞いたことはありませんhttps://github.com/maartenba/MvcSiteMapProvider/wiki/Dynamic-sitemaps

+0

でサイトマッププロバイダを使用することをお勧め、私はそれが私のために動作するかどうかを確認するためにそれをチェックアウトします

@model BaseViewModel(or something derived) @{ ViewBag.Title = "Index"; Layout = ViewBag.Layout; } public ActionResult Index() { if(Model.HasProjectDetails) { @Html.Partial("_ExtendedNav") } if(Model.HasSomeExtraProjectDetails) { @Html.Partial("_MoreExtendedNav") } } 

しかし、全体同上での。 –

0

あなたがここにセッションに基づいて、コントローラからビューのレイアウトを制御することができますが

@{ 
    ViewBag.Title = "Index"; 
    Layout = ViewBag.Layout; 
} 

public ActionResult Index() 
    { 
     if(Session["one]=="one") 
     { 
     ViewBag.Layout = "~/Views/Shared/site_1.cshtml"; 
     } 
     if(Session["one"]=="two") 
     { 
     ViewBag.Layout = "~/Views/Shared/site_2.cshtml"; 

     } 

} 
関連する問題