2011-05-10 42 views
1

对于我的asp.net mvc的项目,每当我回一个观点,我追加几个属性的一个基本控制器通过重写OnActionExecuted方法,像这样:扩展ASP.NET MVC的ViewResult与自定义属性

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if(filterContext.Result.GetType() == typeof(ViewResult)) 
     { 
      var action = filterContext.Result as ViewResult; 
      action.ViewBag.ClientSettings = ClientSettings; 
     } 

     base.OnActionExecuted(filterContext); 
    } 

我目前将ClientSettings粘贴在ViewBag中,然后在视图中从视图中访问它。

我真的很喜欢动作本身直接在ViewResult上拥有ClientSettings属性,这样我就可以直接从视图中访问它,但我不太确定如何做到这一点?

回答

1

我们使用强类型视图并存储像您在模型属性中描述的内容。

你的情况下(基本控制器代码):

protected override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    var viewModel = filterContext.Controller.ViewData.Model as ViewModelBase; 
    if (viewModel != null) 
    { 
     viewModel.ClientSettings = ClientSettings; 
    } 

    base.OnActionExecuted(filterContext); 
} 

现在,如果您的视图模型从ViewModelBase继承,您可以通过的ViewPage<T>Model属性设置为从基本控制器和访问它在您的观点ClientSettings。

+0

谢谢...我认为这是我必须采取的方法......这不完全是我之后的,但它会做的。 – lomaxx 2011-05-10 06:27:01