2010-07-08 44 views
7

我有一個取決於整數列表的操作。我的第一本能就是簡單地用List來聲明行爲。如何將整數列表傳遞給MVC操作?

我想聲明的動作控制器爲:

public ActionResult EditMultiple(List<int> ids) 

,在我查看通話就像這樣:

<%= Html.ActionLink("EditMultiple", "EditMultiple", new { ids = new List<int> {2, 2, 2} })%> 

雖然它編譯列表是空的,當我把一個斷點在行動。任何人都知道爲什麼或有另一種方法?

添加更多的細節有關場景:

我試圖「編輯」在同一時間多個實體。我已經有了一個可以創建/編輯/查看圖書館書籍信息的應用程序。我有一個局部視圖,允許用戶編輯有關單個書籍的信息並將其保存到數據庫。

現在我想創建一個允許用戶使用單個提交按鈕編輯多本書籍信息的視圖。我創建了一個動作EditMultiple,它爲每本書呈現部分內容(此視圖的模型爲List),然後添加提交按鈕。

+0

你發佈了什麼動作? – 2010-07-08 22:52:38

+0

在這種情況下,我上面的示例有點接近我的真實場景。這是GET而不是POST。我會用一些關於真實場景的更多信息來更新描述。 – Justin 2010-07-08 23:13:44

回答

4

是的。默認模型聯編程序可以將「ids」綁定到任何ICollection。但是您必須提交具有相同名稱的多個參數。這消除了使用輔助方法「ActionLink」。從哈克的塊

<a href="<%= Url.Action("CreateMultiple")%>?ids=2&ids=1&ids=3">Test link</a> 

Here's the link:您可以使用URL輔助動作和追加ID來的鏈接,像這樣。

+0

這很有用。謝謝。不使用Html幫助程序,但硬編碼值僅用於原型設計,因此它可以做到這一點。 – Justin 2010-07-08 23:26:59

2

我不認爲

new List<int> {2, 2, 2} 

被正確地轉換成POST是綁定的,你要發送

Ids=1&Ids=2&Ids=3 

逗號分隔列表也可以正常工作,林不知道,我不不要使用蹩腳的默認模型綁定器。

爲什麼你這樣做呢?我希望這是僞代碼的東西...

+0

將更多詳細信息添加到問題中。當然,我實際上並沒有編輯書籍,但爲了討論的目的,這已經足夠好了。如果你能想到一個更好的方式來編輯多本書,而不是創建一個爲EditMultiple編寫的Action,它爲列表中的每個模型呈現Partial,而不是我的耳朵。這是我第一個真正的MVC應用程序,所以我仍然在學習框架和設計模式。 – Justin 2010-07-08 23:25:58

+0

因此,請注意未來人們正試圖弄清楚,就像我一樣,如何提交MVC操作,其中客戶端也以編程方式提交(通過FormUrlEncodedContent):這意味着只需循環並將相同的鍵添加到列表中的KVPs你創建FormUrlEncodedContent從多次,不同的值(它畢竟只是一個List ,不是一個正確的字典,所以這是允許的(並且工作!) – neminem 2015-12-21 23:21:21

相關問題