@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/changeing-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")
直接在视图中调用。
注意:您需要这样做两次——一次用于标准WebViewPage
基类,一次用于WebViewPage<TModel>
基类。