天天看點

在Asp.Net MVC中使用ModelBinding構造Array、List、Collection以及Dictionary

在asp.net mvc中,我們可以在html表單中使用特定的格式傳遞參數,進而通過model binder構造一些集合類型。

第一種方式

比如這樣一個方法

并在表單中添加這些input元素

當其作為一個HTTP POST被送出後的資料大概是這個樣子

那麼通過model binder我們将得到這樣的一個Array集合

這樣就和我們在代碼中顯式的建構如下集合是一樣的

這裡會按照parameterName[index].PropertyName的規則來解析屬性。其中,索引必須是連續的且以0開始的正整數。在上面的例子中由于沒有people[2],是以”重典”将不會被解析。

第二種方式

我們再來看下一種情況

方法簽名如下

Html這樣構造

我們将會得到這樣的鍵值集合

如同我們在代碼中這樣構造

這裡解析key的方式是尋找<b>parameterName[index].Key</b>這樣的結構、解析value的方式是尋找<b>parameterName[index].Value</b>這樣的結構。如果key或者value是複雜類型(如上面例子中的Information類型),則parameterName[index].Key或parameterName[index].value将被視為字首(也可以了解為某個類型)而.PropertyName被視為字尾(即某個屬性)。這裡的索引也要求必須是以0開始的不間斷的正整數。否則斷開以後的部分将不會被解析。

建構IEnumerable&lt;T&gt;, ICollection&lt;T&gt;, IList&lt;T&gt;, T[], Collection&lt;T&gt;, 以及 List&lt;T&gt;這類集合類型需要使用第一種文法。

而建構IDictionary&lt;TKey, TValue&gt; 和 Dictionary&lt;TKey, TValue&gt;這類集合需要使用第二種文法。

如果你不喜歡這種方式,你完全可以在Asp.net mvc中自定義一些binder來處理特定的類型。或者直接使用FormCollection。

參考資料:

<a target="_blank" href="http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx">http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx</a>

<a target="_blank" href="http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx">http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx</a>

本文轉自紫色永恒51CTO部落格,原文連結:http://www.cnblogs.com/024hi/archive/2009/02/20/1394517.html ,如需轉載請自行聯系原作者

繼續閱讀