gpt4 book ai didi

c# - 如何创建一个全局变量并使其可用于 ASP.NET MVC 5 框架中的所有 View ?

转载 作者:行者123 更新时间:2023-11-30 23:10:16 33 4
gpt4 key购买 nike

我有一个基于 ASP.NET MVC 5 框架编写的应用程序。

我创建了一个基本 Controller ,我所有的 Controller 都继承了它。我的基本 Controller 看起来像这样

[Authorize]
public class BaseController : Controller
{
protected IFlashManager Flash { get; set; }
protected ICookie Cookie { get; set; }
protected ICacheClient Cache { get; set; }

protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);

Cookie = new CookieJar(requestContext.HttpContext);
Flash = new FlashManager(TempData);
Cache = new StackExchangeRedisCacheClient(new NewtonsoftSerializer());
}
}

我想让 CookieCache 对象对我的所有 View 全局可用。

Microsoft 对 User 对象做了同样的事情。

有没有一种方法可以在不使用 ViewBagTempData 的情况下做到这一点?

最佳答案

我创建了一个继承自 WebViewPage<T> 的新类.

  • 为您想要提供的每个新事物提供一个属性。
  • 覆盖 InitHelpers()初始化这些属性。
  • 配置系统使用你的类而不是WebViewPage<T>

VB 示例:

Imports System.Linq.Expressions

Public Class ProjectMvcViewPage(Of T)
Inherits WebViewPage(Of T)


Public Overrides Sub InitHelpers()

MyBase.InitHelpers()

Framework = New FrameworkHelper(Of T)(MyBase.ViewContext, Me)

End Sub



Public Overrides Sub Execute()

End Sub



Public Overloads Property Framework As FrameworkHelper(Of T)


End Class

Public Class ProjectMvcViewPage
Inherits ProjectMvcViewPage(Of Object)

End Class




Public Class FrameworkHelper(Of T)
Inherits HtmlHelper(Of T)

Public Sub New(ByVal viewContext As ViewContext, ByVal viewDataContainer As IViewDataContainer)
MyBase.New(viewContext, viewDataContainer)
End Sub

Public Sub New(ByVal viewContext As ViewContext, ByVal viewDataContainer As IViewDataContainer, ByVal routeCollection As RouteCollection)
MyBase.New(viewContext, viewDataContainer, routeCollection)
End Sub



' TODO: Framework-specific methods

End Class

Public Class FrameworkHelper
Inherits AkcHtmlHelper(Of Object)

Public Sub New(ByVal viewContext As ViewContext, ByVal viewDataContainer As IViewDataContainer)
MyBase.New(viewContext, viewDataContainer)
End Sub

Public Sub New(ByVal viewContext As ViewContext, ByVal viewDataContainer As IViewDataContainer, ByVal routeCollection As RouteCollection)
MyBase.New(viewContext, viewDataContainer, routeCollection)
End Sub

End Class

...并在Web.config中注册

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<!--<pages pageBaseType="System.Web.Mvc.WebViewPage">-->
<pages pageBaseType="Project.ProjectMvcViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>

关于c# - 如何创建一个全局变量并使其可用于 ASP.NET MVC 5 框架中的所有 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449713/

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