2009-05-07 11 views
2

ASP.NET MVC site.masterにグローバルメニューを構築しようとしていますが、site.masterからApplication Settingsプロパティにアクセスする方法がわかりましたマークアップ?以前私はおそらく、私のsite.masterのコードビハインドからconfigオブジェクトをインスタンス化し、publicプロパティを設定していたでしょう。しかし今、私は頭を傷つけています...もっとコーヒーが必要でしょう。ASP.NET MVCビューでのアプリケーション設定へのアクセス

回答コードで更新

はBASEURLと呼ばれるアプリケーションproperertiesに設定した文字列を追加しましたし、それをGlobalMenu.cs

public class GlobalMenu 
{ 
    private string _baseurl; 
    public string baseurl 
    { 
     get { return _baseurl; } 
     set 
     { 
      _baseurl = value; 
     } 
    } 

} 
のモデルクラスを作った「 http://mysite.com

の値を与えました

BaseControllerという名前のベースコントローラクラスが作成され、コントローラから継承され、オーバーロードOnActionExecutedly:

 protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     string baseurl = Properties.Settings.Default.baseurl; 

     GlobalMenu menumodel = new GlobalMenu(); 
     menumodel.baseurl = baseurl; 
     ViewData["menudata"] = menumodel; 
     base.OnActionExecuted(filterContext); 
    } 

は、次のようになり、強くGlobalMenuに入力した共有フォルダにViewGlobalMenuと呼ばれる部分図を作成した...しかし、明らかより多くのものを持つ:最後に

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Web.Models.GlobalMenu>" %> 

Site.Master Iでメニューを表示したい場所にこれを追加しました。

<%Html.RenderPartial("ViewGlobalMenu", (MyApp.Web.Models.GlobalMenu)ViewData["menudata"]); %> 

答えて

1

ここに私が使っている戦略があります。他のコントローラがコントローラから派生して派生するベースコントローラを作成します。ベースコントローラでActionExecutedメソッドをオーバーライドし、アプリケーション設定にアクセスします(おそらくキャッシュします)。 ViewDataの特定のキーに割り当てられた強く型付けされたメニューモデルクラスとしてメニューのViewDataを生成します。 ViewResultを返すアクション(おそらく、PartialViewResults)にモデルを提供する必要があります。

メニューモデルクラスを使用してグローバルメニューマークアップを実装する強く型付けされた部分的なビューを作成します。これをRenderPartial経由のMasterPage定義に含めます。キーに対応するViewData項目をモデルとしてモデルとして部分ビューに渡し、メニューでモデルのプロパティを使用できるようにします。

+0

スナップのように働いた...ありがとう!上記の私のサンプルコードを追加します。 – Webjedi

+0

ベースコントローラーからすべてのコントローラーを派生させるのを忘れるまで。私は現在、HttpModuleまたはHttpHandler内のPropertiesオブジェクトを読み取るソリューションを探しています。 – belugabob

+0

@belugabob - それが私たちがテストする理由です。 – tvanfosson

関連する問題