gpt4 book ai didi

c# - 从方法中重定向到 Action

转载 作者:太空狗 更新时间:2023-10-29 23:15:13 24 4
gpt4 key购买 nike

在我的 Controller 中的大多数 Action 中,我需要检查是否满足条件,如果不满足,则将用户重定向到同一 Controller 中的另一个 Action,所以我尝试了:

    public ActionResult Transactions()
{
GrossGalsConfermation();
return View();
}

public void GrossGalsConfermation()
{
if (Session["HasConfirmed"] == null && TerminalUserData.IsGrossGallonTerminal)
{
RedirectToAction("ConversionFactors");
}
}

但即使 if 语句为真,RedirectToAction 也不会执行。我在 VS 中进行了调试,可以看到它从 Action 跳转到 Method,评估 IF 语句并进入它运行RedirectToAction 但随后它会立即跳回到调用 Acation 并返回它的 View 。我怎样才能强制它重定向?在线搜索我发现了类似的问题,解决方案是从 void 更改为 ActionResult 但随后我必须提供后备 Action 以返回哪个无法完成,因为此 Method 将被许多 View 调用。

最佳答案

RedirectToAction 所做的只是返回一个 RedirectToRouteResult - 浏览器不会被重定向,除非您实际返回它。由于您不想在您的方法中执行此操作(您可以返回 null 并在您的操作中执行 null 检查,但这会很笨拙),我建议改用操作过滤器。像下面这样的东西可以做到这一点:

public class GrossGalsFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (Session["HasConfirmed"] == null
&& TerminalUserData.IsGrossGallonTerminal)
{
filterContext.Result =
new RedirectToRouteResult(new RouteValueDictionary(new
{ controller = "MyController", action = "ConversionFactors" }));
}

base.OnActionExecuting(filterContext);
}
}

然后装饰你的 Controller Action :

[GrossGalsFilter]
public ActionResult MyControllerAction

请注意,您可能必须修改过滤器才能获取 TerminalUserData.IsGrossGallonTerminal - 根据您的问题无法知道它的来源。

有关 Action 过滤器的更多信息:http://msdn.microsoft.com/en-us/library/dd381609(v=vs.100).aspx

关于c# - 从方法中重定向到 Action,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20808315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com