2009-04-09 81 views
4

我正在使用ASP.NET MVC 1.0。我有一個ActionResult,它從下拉列表中接收一個帶有值的表單帖子。然後它重定向到一個ActionResult,並將該值作爲參數傳遞。下面是我2 ActionResult的方法:ASP.NET MVC RedirectToAction傳遞錯誤的參數值?

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult FindPromo() 
{ 
    var promoId = Convert.ToInt32(Request.Form["ddlPromotion"]); 
    return RedirectToAction("GetPromo", new { id= promoId }); 
} 

public ActionResult GetPromo(int id) 
{ 

    if (promoId > 0) 
    { 
     var model = GetModel(id); 

     if (model.Promo != null) 
     { 
      return View("Promo", GetModel(id)); 
     } 
    } 

    return RedirectToAction("NotFound"); 
} 

當調試這一點,從下拉列表中的值正確地從我的形式拉高,但對重定向,從以前的請求不同的價值在於通過爲promoId GetPromo方法的值。即使我完全關閉了頁面並重新加載它,就好像它被緩存在某處一樣。我知道這很簡單,但我從來沒有碰到過這個。

編輯:

我改變了參數名稱從promoId到ID,也更新了我的路由表。我已經更新了我的代碼示例上方,這裏是我的路線:

routes.MapRoute("GetPromo", "{controller}/GetPromo/{id}", 
     new { controller = "Promo", action = "GetPromo" }); 

    routes.MapRoute("FindPromo", "{controller}/FindPromo/{id}", 
     new { controller = "Promo", action = "FindPromo" }); 

我仍然得到與參數相同的結果,但是。

+0

您是否發現實際造成這種情況的原因? – burnside 2010-01-25 22:53:06

回答

2

您是否嘗試過使用默認路由設置:{controller}/{action}/{id}? 另外,那些你唯一的路線?路線按順序評估,以便前面的路線可以覆蓋下面的路線,如果它匹配。 菲爾哈克在haacked.com

你也可以玩發表在自己的博客路線調試器:RouteTable.Routes.GetVirtualPath(),傳遞ViewContext.RequestContext和RouteValueDictionary,看看結果網址。

1

我想知道它是否與您的路由設置有關。嘗試將promoId重命名爲id並更新您的路線值。如果這不起作用,你可以用你的路線更新你的文章。

1

你試過嗎?

return RedirectToAction("GetPromo", new { id = promoId.ToString() }); 

我認爲我們遇到了類似的問題,並解決了問題。

如果沒有,你可以這樣做:

var dict = new RouteValueDictionary(); 
dict.Add("id", promoId); 

return RedirectToAction("GetPromo", dict); 

而作爲一個建議,你不應該使用Convert.ToInt32,使用int.Parse或int.TryParse代替。