1

在每个控制器的每个操作中,我都希望检查在某些情况下,是否会将应用程序返回到另一个控制器/操作。我希望支票尽可能简单,例如TestForExit( );

这是我的问题:我的所有操作都返回ActionResult,这是一个示例:

public ActionResult Partial()
{
    TestForExit( );
    ...
    return PartialView( "ViewPartial", data );
}

如果 TextForExit 返回RedirectToAction( "Index", "Home" )我必须有这样的东西:

public ActionResult Partial()
{
    var result = TestForExit( );
    if( result == null )
    {
        ...
        result = PartialView( "ViewPartial", data );
    }
    return result;
}

但是,由于我将在任何地方都有这个,我真的希望TestForExit( )自己能够将我发送到 Home/Index,而不是返回我的 Action 必须返回的 ActionResult。

换句话说,我怎样才能让 TestForExit 实际转到 Home/Index,而不是只返回ActionResult原始 Action 必须返回的内容?

4

3 回答 3

1

您将需要使用自定义 ActionFilter。您可以全局应用此操作过滤器。然后在 中OnActionExecuting,您可以执行TestForExit检查,并在需要时重定向。

例如。

public void TestForExitActionFilterAttribute : ActionFilterAttribute, IActionFilter
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if(TextForExit())
        {
            filterContext.Result = new RedirectToRouteResult(
                new RouteValueDictionary {{ "Controller", "ExitController" },
                                          { "Action", "ExitAction" } });
        }

        base.OnActionExecuting(filterContext);
    }
}

现在将您的[TestForExitActionFilter]属性应用于您的控制器或单个操作。或者,要将其添加到任何地方,请将以下行添加到FilterConfig.RegisterGlobalFilters filters.Add(new TextForExitActionFilterAttribute()).

以下是一些相关链接。

重定向到asp.net mvc动作过滤器中的指定控制器和动作

http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-custom-action-filters

于 2013-08-02T15:55:38.813 回答
0

好吧,您的控制器操作方法最终必须返回,因此无论执行该操作如何,您仍然必须返回一个 ActionResult。

如果您想避免将该代码添加到每个操作,您可以考虑创建一个自定义操作过滤器,然后使用该过滤器标记您的操作,或者如果您需要为每个操作应用一个全局过滤器。

然后在您的操作过滤器中,检查您的退出条件并在必要时重定向。

于 2013-08-02T15:57:58.860 回答
0

或者,您可以直接在控制器类中覆盖 OnActionExecuting 方法并在那里添加逻辑。如果您只需要一个特定控制器的退出逻辑,这将比自定义属性更有意义。

于 2013-08-02T16:04:56.477 回答