Asp.net mvc 4 使用RedirectToAction中断控制器/操作
在每个控制器中的每个操作中,我希望检查在某些情况下是否会将应用程序返回到另一个控制器/操作。我希望检查尽可能简单,比如Asp.net mvc 4 使用RedirectToAction中断控制器/操作,asp.net-mvc-4,Asp.net Mvc 4,在每个控制器中的每个操作中,我希望检查在某些情况下是否会将应用程序返回到另一个控制器/操作。我希望检查尽可能简单,比如TestForExit() 我的问题是:我的所有操作都返回ActionResult,下面是一个示例: public ActionResult Partial() { TestForExit( ); ... return PartialView( "ViewPartial", data ); } 如果TextForExit返回redirectoaction
TestForExit()代码>
我的问题是:我的所有操作都返回ActionResult
,下面是一个示例:
public ActionResult Partial()
{
TestForExit( );
...
return PartialView( "ViewPartial", data );
}
如果TextForExit返回redirectoaction(“Index”,“Home”)
public ActionResult Partial()
{
var result = TestForExit( );
if( result == null )
{
...
result = PartialView( "ViewPartial", data );
}
return result;
}
但是,由于我在任何地方都会有这个,我真的希望TestForExit()
本身能够将我发送到Home/Index,而不是返回我的操作必须返回的ActionResult
换句话说,我怎样才能让TestForExit真正返回主页/索引,而不是仅仅返回原始操作必须返回的ActionResult
。您可以全局应用此操作筛选器。然后在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(新文本ForExitActionFilterAttribute())
这里有一些相关链接
您需要使用自定义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(新文本ForExitActionFilterAttribute())
这里有一些相关链接
您的控制器操作方法最终必须返回,因此无论操作是否执行,您仍然必须返回ActionResult
如果您希望避免将该代码添加到每个操作中,您可以考虑创建一个过滤器,然后使用该过滤器标记您的操作,或者如果您需要为每个操作应用一个全局过滤器
然后在动作过滤器中,检查退出条件,必要时进行重定向。控制器动作方法最终必须返回,因此无论动作执行情况如何,都必须返回动作结果
如果您希望避免将该代码添加到每个操作中,您可以考虑创建一个过滤器,然后使用该过滤器标记您的操作,或者如果您需要为每个操作应用一个全局过滤器
然后在动作过滤器中,检查退出条件,必要时进行重定向。或者,您可以直接在控制器类中重写OnActionExecuting方法,并在其中添加逻辑。如果您只需要一个特定控制器的退出逻辑,那么这比自定义属性更有意义。或者,您可以直接在控制器类中重写OnActionExecuting方法,并在其中添加逻辑。如果您只需要一个特定控制器的退出逻辑,那么这比自定义属性更有意义。谢谢。我将保留此作为参考,尽管我选择了一个不同的答案,适合这种特殊情况。谢谢。我将保留这一点作为参考,尽管我选择了一个适合这种特殊情况的不同答案。