我有一种情况,我正在重定向到接受3个参数的动作。我这样做 -
RedirectToAction("ProductSpecific", routeValues: new { partId = m.partId, categoryId= m.categoryId, categoryName = m.categoryName});
但是,当页面加载时,它包含所有这些参数作为查询字符串。
Parts/ProductSpecific?partId=38&categoryId=1&categoryName=Monitor
我尝试写一条路线,但那没用。有人可以指导如何在这种情况下写一条路线吗?
由于
答案 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