Asp.net mvc 4 在mvc4中写入路由以消除查询字符串

Asp.net mvc 4 在mvc4中写入路由以消除查询字符串,asp.net-mvc-4,routes,Asp.net Mvc 4,Routes,我遇到的情况是,我正在重定向到一个接受3个参数的操作。我这样做就像- RedirectToAction("ProductSpecific", routeValues: new { partId = m.partId, categoryId= m.categoryId, categoryName = m.categoryName}); 但是,当页面加载时,它包含所有这些参数作为查询字符串 Parts/ProductSpecific?partId=38&categoryId=1&c

我遇到的情况是,我正在重定向到一个接受3个参数的操作。我这样做就像-

RedirectToAction("ProductSpecific", routeValues: new { partId = m.partId, categoryId= m.categoryId, categoryName = m.categoryName});
但是,当页面加载时,它包含所有这些参数作为查询字符串

Parts/ProductSpecific?partId=38&categoryId=1&categoryName=Monitor
我试着写一条路线,但没有成功。是否有人可以指导在这种情况下如何编写路由


感谢

RedirectToAction的第二个参数是RouteValue,因此这些参数将附加到querystring中。创建一个额外的路由仍然需要您在querystring中传递值,但如下所示:parts/productspecific/{partId}/{categoryId}/{categoryname},我认为您不希望这样

如果不希望查询字符串中的值,请查看TempData对象,它类似于session,但将一直存在到下一个请求

大概是这样的:

public ActionResult DoSomething()
{
  TempData["partId"] = partId;
  TempData["catId"] = catId;
  TempData["catName"] = catName;
  return RedirectToAction("ProductSpecific");
}

public ActionResult ProductSpecific()
{
  var partId = TempData["partId"];
  var catId = TempData["catId"];
  var catName = TempData["catName"];

  var model = service.LoadProduct(partId, catId, catName);

  return View(model);
}
更新:

对于路线:

 routes.MapRoute(
     name: "ProductRoute",
     url: "{controller}/{action}/{partId}/{categoryId}/{categoryname}",
     defults: new { controller = "product", action = "productspecific"}
 );

将该路由添加到app_start中的route.config类中,然后再添加到默认routesm中,并更改特定于产品的方法签名以接受partid、catid和category name参数。您也可以使用phil hack的这一点来分析您的路由:

这是我想知道的,即拥有此类url的路由-parts/productspecific/{partId}/{categoryId}/{categoryname}。@annantDev更新我的答案