2010-03-26 154 views
0

這可能嗎?
我想做的事情是在actionlink中傳遞一個對象列表作爲參數
當我嘗試這樣做時,列表在到達控制器時總是空的!在asp.net mvc中將視圖中的對象列表傳遞給控制器​​?

在視圖

<%= Url.Action("ActionName", new { list = Model.ListOfObjects}) %> 

在控制器

public ActionResult ActionName(List<Object> list) 
    { 
     //Do stuff 
    } 
+0

什麼URL被渲染? – SLaks 2010-03-26 12:17:01

+0

/Controller/Object?list=System.Collections.Generic.List%601%5BObject%5D – Boob 2010-03-26 12:21:48

+0

對不起,應該是/Controller/ActionName?list=System.Collections.Generic.List%601%5BObject%5D – Boob 2010-03-26 12:23:04

回答

0

雖然它可能採取的對象列表,它可能不會使你期待看到什麼;它實際上可能會吸引列表類(或該列表所代表的任何類)的值,並將其用作參數。

不通過get請求,除非您手動寫出參數並反序列化參數。或者,相反,使用表單中的這些值回發到服務器;那麼,這將填充正確。

HTH。

1

就是否有可能 - 這是可能的,但不是你想要的方式。請記住,這將轉換爲一個將被MVC解析的URL,並且不同的參數將作爲直接參數或通過模型聯編程序傳遞給動作。

我會建議您嘗試弄清楚URL將不得不看起來像然後可能做一些自定義代碼來生成URL(也許使用自定義幫助函數/擴展方法)。如果你將它與一個自定義的模型聯編程序結合起來,你應該有一個非常優雅的解決方案,它完全符合你的需求

例如,如果您的列表中有字符串類型的3個對象,你可以寫一個幫手來生成一個URL像這樣(假設列表中包含「第一」,「第二」和「第三」)

/控制器/動作?OBJ1 =第一& OBJ 2 =第二& OBJ 3 =第三

現在你只需要編寫一個模型綁定,以查找被稱爲「OBJ1」項,「OBJ 2」等,並簡單地將結果添加到名單。

0

像這樣的東西可以工作,如果你需要它在很多地方,我建議你做一個幫手來包含這個邏輯。

<% var values = new RouteValueDictionary(); 
    for (int i = 0; i < Model.ListOfObjects.Count -1; i++) 
    { 
     values.Add("list["+i+"]", Model.ListOfObjects[i]); 
    }%> 
<%= Url.Action("ActionName", values); %> 

該操作將知道如何處理控制器中的列表。

相關問題