在mvc4中编写路由以消除查询字符串

时间:2013-02-28 16:50:30

标签: 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&categoryName=Monitor

我尝试写一条路线,但那没用。有人可以指导如何在这种情况下写一条路线吗?

由于

1 个答案:

答案 0 :(得分:1)

RedirectToAction的第二个参数是routeValues,因此这些参数将附加到查询字符串。创建一个额外的路由仍然需要你传递查询字符串中的值,但是像这样:parts / productspecific / {partId} / {categoryId} / {categoryname},我认为你不想要。

如果您不想查询查询字符串中的值,请查看TempData对象,该对象与会话类似,但会一直存在,直到下一个请求。

这样的事情:

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

在默认路由m之前的app_start中的route.config类中添加该路由,并更改产品特定方法签名以接受partid,catid和category name参数。你也可以使用phil hack来描述你的路线:Route Debugger