【发布时间】:2009-12-17 00:18:03
【问题描述】:
我所有的控制器都基于 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"] 不会被填充的任何原因。因此,我正在重写站点以仅使用强类型视图数据(并设置一些硬默认值)。但是如果有其他更好的方法,我会走那条路。
谢谢!
【问题讨论】:
标签: c# asp.net-mvc class controller viewdata