MVC 繫結 集合型別 model
第一種方式
比如這樣一個方法
public ActionResult Infancy(Person[] people) { // ... }
並在表單中新增這些input元素
<input type="text" name="people[0].FirstName" value="神" /> <input type="text" name="people[0].LastName" value="魚" /> <input type="text" name="people[1].FirstName" value="鬱悶的" /> <input type="text" name="people[1].LastName" value="PP" /> <input type="text" name="people[3].FirstName" value="重" /> <input type="text" name="people[3].LastName" value="典" />
people%5B0%5D.FirstName=神&people%5B0%5D.LastName=魚&people%5B1%5D.FirstName=鬱悶的&people%5B1%5D.LastName=PP&people%5B3%5D.FirstName=重&people%5B3%5D.LastName=典
那麼通過model binder我們將得到這樣的一個Array集合
people[0].FirstName = "神" people[0].LastName = "魚" people[1].FirstName = "鬱悶的" people[1].LastName = "PP" people[3].FirstName = "重" people[3].LastName = "典"
這樣就和我們在程式碼中顯式的構建如下集合是一樣的
people = new Person[] { new Person() { FirstName = "神", LastName = "魚" }, new Person() { FirstName = "鬱悶的", LastName = "PP" }
這裡會按照parameterName[index].PropertyName的規則來解析屬性。其中,索引必須是連續的且以0開始的正整數。在上面的例子中由於沒有people[2],所以”重典”將不會被解析。
第二種方式
我們再來看下一種情況
方法簽名如下
public ActionResult Infancy(IDictionary<string, Information> people) { // ... }
Html這樣構造
<input type="text" name="people[0].Key" value="forever" /> <input type="text" name="people[0].Value.Age" value="12" /> <input type="text" name="people[0].Value.Gender" value="純爺們" /> <input type="text" name="people[1].Key" value="鬱悶的PP" /> <input type="text" name="people[1].Value.Age" value="50" /> <input type="text" name="people[1].Value.Gender" value="不好說" />
我們將會得到這樣的鍵值集合
people[0].Key = "forever" people[0].Value.Age = 12 people[0].Value.Gender = "純爺們" people[1].Key = "鬱悶的PP" people[1].Value.Age = 50 people[1].Value.Gender = "不好說"
如同我們在程式碼中這樣構造
var people = new Dictionary<string, Information>() { { "forever", new Information() { Age = 12, Gender = "純爺們" } }, { "鬱悶的PP", new Information() { Age = 50, Gender = "不好說" } } };
這裡解析key的方式是尋找parameterName[index].Key這樣的結構、解析value的方式是尋找parameterName[index].Value這樣的結構。如果key或者value是複雜型別(如上面例子中的Information型別),則parameterName[index].Key或parameterName[index].value將被視為字首(也可以理解為某個型別)而.PropertyName被視為字尾(即某個屬性)。這裡的索引也要求必須是以0開始的不間斷的正整數。否則斷開以後的部分將不會被解析。
構建IEnumerable
而構建IDictionary
如果你不喜歡這種方式,你完全可以在Asp.net mvc中自定義一些binder來處理特定的型別。或者直接使用FormCollection。
<form method="post" action="/Home/Create"> <input type="hidden" name="products.Index" value="cold" /> <input type="text" name="products[cold].Name" value="Beer" /> <input type="text" name="products[cold].Price" value="7.32" /> <input type="hidden" name="products.Index" value="123" /> <input type="text" name="products[123].Name" value="Chips" /> <input type="text" name="products[123].Price" value="2.23" /> <input type="hidden" name="products.Index" value="caliente" /> <input type="text" name="products[caliente].Name" value="Salsa" /> <input type="text" name="products[caliente].Price" value="1.23" /> <input type="submit" /> form>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-768081/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ASP.NET Core】MVC操作方法如何繫結Stream型別的引數ASP.NETMVC型別
- MVC5之表單集合資料自動繫結到物件屬性(集合)中MVC物件
- input,select, v-model 繫結的值為數字型別型別
- Vue、MVVM、MVC、雙向繫結VueMVVMMVC
- vue v-model 雙向繫結Vue
- vue元件繫結v-model指令Vue元件
- vue 動態繫結 v-modelVue
- 動態繫結 input v-model
- Guava集合--新集合型別Guava型別
- vue 雙向繫結(v-model 雙向繫結、.sync 雙向繫結、.sync 傳物件)Vue物件
- List型別集合型別
- Spring MVC xml繫結pojo造成的XXESpringMVCXMLPOJO
- 0、Java集合體繫結構—最全總結Java
- python 集合型別 setPython型別
- Vue(10)表單輸入繫結v-modelVue
- vue 如何在迴圈中繫結v-modelVue
- Go專案實戰—引數繫結,型別轉換Go型別
- HashMap與LinkedHashMap型別集合HashMap型別
- Python3學習(基本資料型別-集合-字典-基本資料型別總結)Python資料型別
- Spring Mvc Long型別精度丟失SpringMVC型別
- 基礎-JAVA集合型別主要區別Java型別
- C#中常用集合型別C#型別
- python的資料型別(集合)Python資料型別
- 【Redis實戰】有序集合型別Redis型別
- 理解ASP.NET Core - 模型繫結&驗證(Model Binding and Validation)ASP.NET模型
- Vue用@input代替v-model實現資料繫結Vue
- MVC遍歷map集合MVC
- python組合資料型別(集合)Python資料型別
- Hive中的集合資料型別Hive資料型別
- C#集合型別大揭祕C#型別
- C# 泛型集合的自定義型別排序C#泛型型別排序
- ASP.NET Core MVC 之模型(Model)ASP.NETMVC模型
- Python - 基礎資料型別 set 集合Python資料型別
- 資料型別——集合與while迴圈資料型別While
- python-資料型別之set集合Python資料型別
- 1.1.5 python基本資料型別之集合Python資料型別
- 前端 | 自定義元件 v-model:Vue 如何實現雙向繫結前端元件Vue
- [swift 進階]讀書筆記-集合型別協議 C3P5_專門的集合型別Swift筆記型別協議
- 【ASP.NET Core】MVC 控制器的模型繫結(巨集觀篇)ASP.NETMVC模型