2011-04-22 40 views
0

我有這兩個方法在同一個控制器中,第一個傳遞兩個參數到第二個。RedirectToAction不通過所有參數

調試時,傳遞的列表(model.RequestedProducts)是正確的(非空),但在第二種方法中,只有idOR被正確讀取,List<OCS> RequestedProducts爲空。

[HttpPost] 
    public ActionResult Index(int idOR, ViewModel model, string add, string remove, string send) 
    { 
     //... 
       return RedirectToAction("Done", 
             new { idOR = idOR, 
             RequestedProducts = model.RequestedProducts});  
    } 

    public ActionResult Done(int IdOR, List<OCS> RequestedProducts) 
    { ... 

我錯過了什麼?

有沒有更好的方法來做到這一點? (而不是重定向到行動)

謝謝

回答

1

當您使用RedirectToAction你是返回一個消息給客戶端請求一個新的URL大概就像/controller/action/id。您將會定義URL的形成方式。我猜你已經定義了默認路由,在你的情況下,MVC無法知道如何將你的RequestedProducts類型反序列化到一個URL中,然後將它綁定回List類型。

相反,您可以使用TempData對象在Action請求之間傳遞數據。

TempData屬性值存儲在會話狀態中。在設置了TempDataDictionary值之後調用的任何操作方法都可以從該對象獲取值,然後處理或顯示它們。 TempData的值會一直保持到讀取或直到會話超時。

This MSDN article解釋了這一切。

+0

感謝您花時間回答我的問題。它適用於TempData。你認爲哪些更優雅,改變路線或使用TempData? – Lucas 2011-04-22 13:20:31

+0

只知道使用TempData將使用會話 – BlackTigerX 2011-04-22 16:06:29