从ActionFilter返回视图

时间:2009-02-03 15:27:08

标签: asp.net-mvc

我有一个ActionFilter,用于检查URL中的参数是否有效。 如果它无效,我必须渲染一个视图。我不想重定向,因为我仍然需要ActionExecutingContext。 可以这样做吗?

    public override void  OnActionExecuting(ActionExecutingContext filterContext)
    {
        Guid processIdentifier = (Guid)filterContext.RouteData.Values["processIdentifier"];
        //if processIdentifier  not found render a view with message and some other objects in ViewData
        filterContext.Controller.ViewData.ModelState.AddModelError("WrongProcessIdentifier", "The process-id you supplied is not valid");
        base.OnActionExecuting(filterContext);
    }

3 个答案:

答案 0 :(得分:37)

HandleErrorAttribute得到了我想要的东西。

filterContext.Result = new ViewResult
            {
                ViewName = "MessagePage",
                ViewData = filterContext.Controller.ViewData,
                TempData = filterContext.Controller.TempData
            };

答案 1 :(得分:1)

是。查看HandleErrorAttribute的源代码。

答案 2 :(得分:0)

试试这个

[HandleError]
public ActionResult MyAction (int id)
{
    // ...
}

将要渲染的视图放入~/Views/Shared/Error.ascx