如果他们正在使用移动浏览器,我想将用户重定向到其他 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 过滤器来实现您的要求。