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