我们正在使用一个具有"索引"动作:
[Route("")]
[Route("Index/{id:int?}")]
[Route("{id:int?}")]
public ActionResult Index(int? id)
{
var viewModel = new GroupViewModel();
....
return View("Index", viewModel);
}
我们可以使用example.com/my/
或example.com/my/index
或example.com/my/index/1
来执行此操作。这可以按我们的意愿工作。现在我们要使用example.com/my/index/1
语法重定向到此。
执行此行时:
return RedirectToAction("Index", "My", new { id = 3 });
它将使用此网址重定向:
example.com/my?id=3
我们希望它改为使用example.com/my/index/1
。
是否有人知道强制RedirectToAction
在没有问号的情况下使用此约定的方法?
更新了5/2/17以更正以下评论的控制器名称
答案 0 :(得分:1)
您需要告诉您需要使用哪个路由模板来生成重定向的URL。目前您还没有一个可以生成 / my / index / 1 的网址的网址模板"My/Index/{id:int?}"
首先,将该路由模板添加到您的操作中,并设置该路由的Name
属性,如下所示:
[Route("")]
[Route("Index/{id:int?}")]
[Route("My/Index/{id:int?}", Name = "MyCompleteRouteName")]
[Route("{id:int?}")]
public ActionResult Index(int? id)
{
var viewModel = new GroupViewModel();
....
return View("Index", viewModel);
}
其次,您必须RedirectToRoute
而不是RedirectToAction
。 RedirectToRoute
允许您通过提供名称来选择所需的模板。
所以你必须打电话给这一行:
RedirectToRoute("MyCompleteRouteName", new { id = 3 });
而不是
RedirectToAction("Index", "My", new { id = 3 });