如果用户使用移动浏览器,我想将用户重定向到其他视图.我已经决定使用MVC过滤器将其应用于我希望拥有移动视图的操作.
我相信这个重定向需要在OnActionExecuted中发生,但是filterContext不包含有关视图的信息 – 但它确实在OnResultExecuted中,但是此时我认为更改视图为时已晚.
这就是我在执行的结果中所拥有的以及我希望在Action Executed中工作的内容.
public class MobilePageFilter : ActionFilterAttribute { public override void OnResultExecuted(ResultExecutedContext filterContext) { if(filterContext.Result is ViewResult) { if (isMobileSite(filterContext.HttpContext.Session[SetMobile.SESSION_USE_MOBILE])) { ViewResult viewResult = (ViewResult)filterContext.Result; string viewName = viewResult.ViewName; filterContext.Result = new ViewResult { ViewName = "Mobile/" + viewName,ViewData = viewResult.ViewData,TempData = viewResult.TempData }; } } base.OnResultExecuted(filterContext); } }
解决方法
我会向你推荐
following blog post,它解释了一个更好的替代方案来实现你的要求,而不是使用动作过滤器.