2013-02-28 53 views
0

我有一種情況,即將重定向到接受3個參數的操作。這個我做這樣 -在mvc4中寫入路由以消除查詢字符串

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

然而,當頁面加載,它包含了所有這些參數作爲查詢字符串。

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

我試着寫的路線,但沒有奏效。有人可以請指導如何在這種情況下編寫路線?

由於

回答

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

添加在route.config類路線app_start默認routesm前和變更您的產品特定方法簽名接受partid,catid和類別名稱參數。您還可以使用phil hack來分析您的路線:Route Debugger

+0

多數民衆贊成我想知道,即路線有這種類型的網址 - parts/productspecific/{partId}/{categoryId}/{categoryname }。 – annantDev 2013-03-05 17:17:27

+0

@annantDev更新我的回答 – gdp 2013-03-06 06:17:35

+0

明白了。謝謝! – annantDev 2013-03-07 21:40:42