Asp.net mvc 4 在mvc4中写入路由以消除查询字符串
我遇到的情况是,我正在重定向到一个接受3个参数的操作。我这样做就像-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
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更新我的答案