我所有的控制器都基于 BaseController,在它们之间共享属性并覆盖 OnActionExecuting 以根据路由设置一些值。
我正在创建一个 BaseViewData 类来对我的所有视图数据执行相同的操作。
目前我正在填充视图数据,如下所示(C#):
var viewData = new BaseViewData
{
Name = "someName",
Language = "aLanguage",
Category = "aCategoryName"
};
我在需要视图数据的每个操作中都这样做。一些属性是通用的,需要在每个动作中设置。有没有办法在更全局的范围内设置一些属性?
如果我在 BaseController 上的 OnActionExecuting 方法中实例化 BaseViewData 类,如何从常规控制器(从 BaseController 派生)中的操作访问 BaseViewData 属性?
响应丹尼斯·帕尔默的更新:
我之所以这样做,是因为我在某些请求上没有随机填充 ViewData["lang"] 时遇到的一个烦人的问题。如果语言是英语,则 ViewData["lang"] 包含“en”,如果是日语,则包含“ja”(好吧,无论如何都应该如此)。我在 BaseController 上的 OnActionExecuting 中填充 ViewData["lang"]。
在我看来,我根据语言调用了一些部分视图:
<% Html.RenderPartial(ViewData["lang"] + "/SiteMenu"); %>
但是我随机收到“找不到/SiteMenu”状态的错误,这表明 ViewData["lang"] 没有价值。我只是找不到 ViewData["lang"] 不会被填充的任何原因。因此,我正在重写站点以仅使用强类型视图数据(并设置一些硬默认值)。但如果另一种方法更好,我会走那条路。
谢谢!