如果他们正在使用移动浏览器,我想将用户重定向到其他 View 。我已经决定要通过将MVC过滤器应用于我希望具有移动 View 的操作来使用MVC过滤器。

我相信这种重定向需要在OnActionExecuted中发生,但是filterContext不包含有关 View 的信息-但是它包含在OnResultExecuted中,但是到现在,我认为更改 View 已经为时已晚。

如何截取 View 名称并更改ViewResult?

这就是我执行的结果,以及我希望在“执行的 Action ”中进行的工作。

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,它说明了一种更好的替代方法,而不是使用 Action 过滤器来实现您的要求。

09-18 12:00