菜单控制器上的.NET MVC路由以重定向到特定控制器

时间:2020-01-03 19:16:07

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

我遇到以下问题:

当我单击视图上的菜单项按钮时,我到达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 Controller。

这与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参数名称具有相同值的Controller。

请帮忙!并预先感谢!

2 个答案:

答案 0 :(得分: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})'">

答案 1 :(得分:0)

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

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

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");

分别针对以上每一项。

相关问题