我正在构建这个 MVC3 Razor ASP.NET 应用程序,在该应用程序中我使用了一个继承自它的自定义 WebViewPage。所以我所有的视图都使用我的自定义 WebViewPage:
public class MyCustomWebViewPage : System.Web.Mvc.WebViewPage
{
public CustomHelper MyHelper { get; private set; }
:
}
然后在位于 Views 文件夹中的 web.config 中,我指出 MyCustomViewPage 是我的默认基本页面。
<system.web.webPages.razor>
<pages pageBaseType="Namespace.MyCustomWebViewPage">
<namespaces>
:
</namespaces>
</pages>
</system.web.webPages.razor>
到目前为止一切顺利,在 View 的 .cshtml 页面上,我可以从 razor 标记访问我的自定义助手:
@MyHelper.SomeMethod()
现在,我需要有条件地对助手做一些事情。我尝试在 CSHTML 的 @{} 启动部分设置 helper 的属性,但这为时已晚,无法考虑。
因此,我正在考虑在调用的 Action 方法上或通过覆盖 OnActionExecuting() 方法来执行此操作。
我遇到的问题是,在控制器中我还没有找到访问自定义助手的方法,例如:
public class AnyController : Controller {
public ActionResult Index() {
MyHelper.SomeProperty = true;
}
}
为了进一步解释,这个概念是在一个动作(控制器中的动作代码)中,我想在自定义助手中设置一个属性,以启用某些功能。这样,这不会呈现在不需要它的视图上。它与在视图中定义内容的@section 的概念不同,而是说“我希望将此功能添加到布局中”,并且布局将输出一些预定义的标记,这些标记将启用该功能并且在几个地方视图中可能存在需要“功能支持标记或脚本”的“掘金”。如果我使用一个部分,那么那个“通用”脚本会出现多次,这不是我需要的。
话虽如此,如何从控制器内访问基本视图页面中定义的(自定义)帮助程序?