【问题标题】:.NET MVC Route on Menu Controller to Redirect to specific controller.NET MVC 路由在菜单控制器上重定向到特定控制器
【发布时间】:2020-04-22 08:17:30
【问题描述】:

我遇到以下问题:

当我单击视图上的菜单项按钮时,我到达 MenuController 方法 RedirectAction

public ActionResult RedirectAction(string actionRedirect, int moduloAtual)
    {
        TempData["ModuloAtual"] = moduloAtual;
        var botaoVoltarSubMenu = Request["voltar"];
        ViewBag.baseUsuario = Request["baseUsuario"];
        var redirect = string.Empty;

        if (botaoVoltarSubMenu == "1")
        {
            redirect = $"{Url.Content("~")}{actionRedirect}?baseUsuario={ViewBag.baseUsuario}";
        }
        else
        {

            redirect = $"{Url.Content("~")}{actionRedirect}";
        }

        return Redirect(redirect);
    }

我面临的是,return Redirect(redirect) 浏览器上的 URL 显示后(我的 actionRedirect 值为Notas

http://localhost:40169/Menu/RedirectAction?actionRedirect=Notas&moduloAtual=40000

并且不会重定向到我的 /Notas 控制器。

这和RouteConfig有关系吗?

我的 RouteConfig.cs:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{intID}",
            defaults: new { controller = "Home", action = "Index", intID = UrlParameter.Optional }
        );
    }

我在这里做错了什么?我只想重定向到与我的actionRedirect 参数名称具有相同值的控制器。

请帮忙!提前致谢!

【问题讨论】:

    标签: c# asp.net asp.net-mvc routes


    【解决方案1】:

    您确定要在代码中使用如此复杂的简单菜单重定向吗?听起来您只需要使用我们的无操作参数重定向到特定的控制器/操作。

    <a href="@Url.Action("Index", "Notas", new { moduloAtual = 4000 })">Notas</a>
    

    更新:
    至于您当前的实现,您似乎无法访问RedirectAction 操作,因为您提供了错误的参数名称,而不是modulo 它应该是moduloAtual

    <div class="box-button text-center hvr-grow-shadow" onclick="window.location = '@Url.Action("RedirectAction", "Menu", new {actionRedirect = obj, moduloAtual = idModulo})'">
    

    【讨论】:

    • 其实我是这样得到这个系统的,这个方法已经实现了,但由于某种原因无法正常工作。这是我在菜单上调用控制器方法的 div:
    • 这是一个使用数据库模块创建的动态菜单。因此,对于每次单击,我都有一个不同的对象和 moduleId,我将它们传递给 MenuController 为我处理,然后重定向。
    • @RodrigoAssis 说得通。查看我的更新答案,在您的实施中发现一个可能会禁止访问您的操作的问题
    【解决方案2】:

    Redirect 方法不会重定向到控制器,它会重定向到 URL 字符串。 RedirectToAction 将允许您指定一个动作和一个控制器,但您似乎没有对指定的控制器进行实际操作。

    以下将重定向到actionRedirect参数中指定的控制器上的Index操作:

    public ActionResult RedirectAction(string actionRedirect, int moduloAtual)
    {
        TempData["ModuloAtual"] = moduloAtual;
        var botaoVoltarSubMenu = Request["voltar"];
        ViewBag.baseUsuario = Request["baseUsuario"];
    
        if (botaoVoltarSubMenu == "1")
        {
            return RedirectToAction("Index", actionRedirect, new { baseUsario = ViewBag.baseUsario });
        }
    
        return RedirectToAction("Index", redirectAction);
    }
    

    如果actionRedirect 是动作,并且它应该始终使用Notas 控制器,则更改为:

    return RedirectToAction(redirectAction, "Notas", new { baseUsario = ViewBag.baseUsario }); 
    
    return RedirectToAction(redirectAction, "Notas");
    

    分别用于上述每个。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签