动作过滤器为ASP.NET MVC 4中的视图提供公共数据

时间:2013-04-08 20:18:09

标签: asp.net-mvc asp.net-mvc-4

我正在尝试为ViewModelBase派生的所有视图获取一些常用属性。除了我遇到了一种Catch-22 ......

我的ViewModelBase的常见属性为:UserEnvironment(还有更多,但对于这个问题,这两个就足够了。)

现在,我有一个全局过滤器来分配这两个属性 - ViewModelBase.User属性是从BaseController.User分配的,之前由授权过滤器分配。

它适用于所有情况,但是:基于业务逻辑的授权过滤器有时会决定将用户重定向到“尚未批准”的页面。这样做是这样的:

var notApprovedView = new ViewResult();
notApprovedView.ViewName = "NotYetApproved";
filterContext.Result = notApprovedView;

除此之外,在这种情况下,ViewModel还没有应该由Global过滤器分配的公共属性,这会导致运行时异常。

处理我需要分配公共属性并且某些常见属性可能会根据授权而变化的情况,适当的(即最佳实践,而不是黑客)方式是什么?

感谢。

1 个答案:

答案 0 :(得分:0)

我想我可能已经错过了这片树上的森林...对不起。

我可以在授权过滤器中执行以下操作:

var notApprovedView = new ViewResult();
notApprovedView.ViewName = "NotYetApproved";

// add this line    
notApprovedView.Model = new ViewModelBase(){User = this.user};

filterContext.Result = notApprovedView;