0

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

RedirectToAction("ProductSpecific", routeValues: new { partId = m.partId, categoryId= m.categoryId, categoryName = m.categoryName});

但是,当页面加载时,它包含所有这些参数作为查询字符串。

Parts/ProductSpecific?partId=38&categoryId=1&categoryName=Monitor

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

谢谢

4

1 回答 1

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

在您的默认路由之前的 app_start 中的 route.config 类中添加该路由,并更改您的产品特定方法签名以接受 partid、catid 和类别名称参数。您还可以使用 phil hack 中的此功能来分析您的路线:Route Debugger

于 2013-03-01T06:19:44.657 回答