这是关于@Andre Calil 在以下 SO Razor MVC 中提供的解决方案的问题,将可跨母版页、partiview 和视图访问的全局变量放在哪里?
我正在使用 Andre 的方法并且有一个小问题:我的 _Layout 被强类型化为 BaseModel,而我的视图被强类型化为从 BaseModel 继承的 AccountModel。
问题是:如果我返回一个没有模型的视图,即返回 View(),那么我会得到一个异常。这是因为 BaseController OnActionExecuted 事件正在检查提供的模型是否为空,如下所示:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResultBase)//Gets ViewResult and PartialViewResult
{
object viewModel = ((ViewResultBase)filterContext.Result).Model;
if (viewModel != null && viewModel is MyBaseModel)
{
MyBaseModel myBase = viewModel as MyBaseModel;
myBase.Firstname = CurrentUser.Firstname; //available from base controller
}
}
base.OnActionExecuted(filterContext);//this is important!
}
该模型为空,因此这种情况并不总是有效。我的下一步是确保始终将模型传递到视图中,即使它是空的 BaseModel 对象。问题是我得到以下异常:
The model item passed into the dictionary is of type 'MyNamespace.BaseModel', but this dictionary requires a model item of type 'MyNamespace.AccountModel'.
我需要澄清两点:
- 我认为这会起作用,因为 AccountModel 是 BaseModel 的子类?
- 如果上面代码中的模型为空,是否有另一种方法可以将模型注入每个视图,这样我就可以避免重构所有代码以包含返回视图(BaseModel.Empty)?