带有参数的RedirectToAction

时间:2015-02-05 13:55:43

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

我有一些问题,如果我没有参数路由或参数调用Id它工作正常,但是当我添加一些不同的参数路由RedirectToAction不起作用时,基本上重定向到一些动作,它会抛出一个错误:没有路由在路由表中匹配提供的值。

[Route("First")]
public ActionResult First()
{
    //THIS DOESN'T WORK
    //return RedirectToAction("Second", new { area = "plans"});

    //THIS WORKS
    return RedirectToAction("Third", new { id = "12" });
}

[Route("Second/{area}")]
public ActionResult Second(string area)
{
    return new ContentResult() { Content = "Second : " + area};
}


[Route("Third/{id}")]
public ActionResult Third(string id)
{
    return new ContentResult() { Content = "Third " + id };
}

因此,当我输入/ First时,它正确地重定向到第三个但是第二个它会抛出错误。

我在RouteConfig中没有任何额外的东西:

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

1 个答案:

答案 0 :(得分:2)

您可能会将area参数与area路由参数冲突。 Areas is a resource from Asp.Net MVC具有以下定义:

  

区域是Controller,Models和Views等的逻辑分组   MVC应用程序中模块的相关文件夹。按惯例,顶部   区域文件夹可以包含多个区域。使用区域,我们可以写   更加可维护的应用程序代码,根据需要完全分离   到模块。

您可以尝试重命名此参数并使用它,例如,尝试将area重命名为areaName

[Route("First")]
public ActionResult First()
{
    return RedirectToAction("Second", new { areaName= "plans"});
}

[Route("Second/{areaName}")]
public ActionResult Second(string areaName)
{
    return new ContentResult() { Content = "Second : " + areaName};
}