gpt4 book ai didi

c# - 如何从 ViewStart 中访问(自定义)网络助手?

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:25 26 4
gpt4 key购买 nike

我已经在我的 MVC3 Razor 应用程序 (ASP.NET) 中定义了一些自定义助手,并且在 ViewStart 代码中我想访问我的自定义助手。

我注意到它们在 _ViewStart 中不可访问,这似乎可以理解,因为 ViewStart 派生自 ViewStartPage 而不是 WebViewPage。

所以我尝试在自定义 ViewStart 类中定义助手,但事实证明我需要访问 ViewDataContainer 才能初始化助手。

所以,问题是,我如何从 ViewStart(或自定义 ViewStartPage)访问我的自定义帮助程序,如果不能,我能否用 NULL 初始化 viewDataContainer 构造函数属性。我不希望在我的自定义 ViewStartPage 中需要任何 ViewData 访问权限。

我也尝试实现自定义 ViewStart 类,但它给了我这个错误:

CustomViewStart does not implement inherited abstract member 'System.Web.WebPages.WebPageExecutingBase.Execute()'

我应该在该执行方法中做什么?我不想在 customViewStart 中做任何花哨的事情,只需访问我的助手。

最佳答案

好吧,毕竟我怀疑这是可能的,只是需要先整理出一些具体的技术细节。

public abstract class CustomViewStartPage : System.Web.Mvc.ViewStartPage {
public Helpers.InvariantHelper ConfigHelper { get; private set; }

public CustomViewStartPage() : base() {
ConfigHelper = new Helpers.InvariantHelper();
}
}

现在,我在我的 WebViewPage 自定义基页中定义了几个自定义助手,它们为 View 工作。但是,在 ViewStart 中我需要做某些不需要访问 ViewContext 的事情(这里只是一个微不足道的例子)(正如我最初认为的那样)。

因此,有了这个,我现在可以在我的 _ViewStart.cshtml 中拥有它:

@* Views/_ViewStart.cshtml *@
@inherits MyNamespace.Web.Mvc.CustomViewStartPage
@{
var something = ConfigHelper.DisableParentLayout;
}

当然,也可以像 @MortenMertner 指出的那样使用类的静态成员(从外部对问题的全新看法),但在某些情况下,这可能不是您真正想要的。此处的示例毫无意义,但目的是为需要的人说明如何完成它。

如果另一方面需要访问 ViewContext(另一个有效场景),您可能需要查看我上面评论中的帖子,其中描述了如何修改此自定义 View 起始页以无错误地访问上下文。

关于c# - 如何从 ViewStart 中访问(自定义)网络助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10872031/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com