@using NamespaceHere;
ビューの上部に追加するか、ビューのWeb構成に名前空間として登録することにより、名前空間を暗黙的にすることができます。このようなもの:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="NamespaceHere"/>
</namespaces>
</pages>
</system.web.webPages.razor>
ビューにカスタムページベースタイプを使用すると、関数でビューバッグにアクセスできます。これを行うための手順は、http://haacked.com/archive/2011/02/21/changing-base-type-of-a-razor-view.aspxにあります。
あなたの状況では、ViewBagにアクセスするには、FunctionThatIUseALot
WebViewPageをコンストラクターパラメーターとして(動的またはViewDataDictionaryとして)受け取る非静的クラスで定義する必要があります。次に、WebViewPageのInitHelpers
オーバーライドで、ヘルパークラスを作成してを渡すことができますthis
。これにより、WebViewPageのすべての標準プロパティにアクセスできるようになります。
このようなもの:
public class Utils {
private WebViewPage page;
public Utils(WebViewPage page) { this.page = page; }
public FunctionThatIUseALot(string someParameter) {
string someViewBagValue = page.ViewBag.SomeViewBagValue;
}
}
public abstract class CustomWebViewPage : WebViewPage {
public Utils Utils { get; set; } // Utils is your helper class
public override void InitHelpers() {
base.InitHelpers();
Utils = new Utils(this);
}
}
上記はそれを機能させるためにあなたがする必要があるすべてではありません、あなたは残りのために記事を読む必要があるでしょう。@Utils.FunctionThatIUseALot("some value")
ただし、最終的には、ビューで直接呼び出すことができるようになります。
注:これは2回行う必要があります。1回は標準WebViewPage
の基本クラス用で、もう1回はWebViewPage<TModel>
基本クラス用です。