MVC复杂类型的模型绑定

1,复杂类型

//模型范例
 public class Contact
  {
      public string Name { get; set; }
      public string PhoneNo { get; set; }
      public string EmailAddress { get; set; }
      public Address Address { get; set; }
  }
  public class Address
  {
      public string Province { get; set; }
      public string City { get; set; }
      public string District { get; set; }
      public string Street { get; set; }
  }
//请求表单范例
<input id="Name" name="Name" type="text" ... />
<input id="PhoneNo" name="PhoneNo" type="text" ... />
<input id="EmailAddress" name="EmailAddress" type="text" ... />
<input id="Address_Province" name="Address.Province" type="text" ... />
<input id="Address_City" name="Address.City" type="text" ... />
<input id="Address_District" name="Address.District" type="text" ... />
<input id="Address_Street" name="Address.Street" type="text"... />
public ActionResult Action(Contact foo, Contact bar){}

2,基于名称的数组绑定(名称必须相同)

//数据源范例
 <input name="Foo" type="text" value="123"/>
 <input name="Foo" type="text" value="456" />
 <input name="Foo" type="text" value="789" />
Public ActionResult ActionMethod(string[] foo){}

3,基于索引的绑定(索引必须从0开始,且连续,不连续会导致后面的绑定失败)

//请求表单范例
<input  name="[0].Name" type="text" value="" .../> 

<input  name="[1].Name" type="text" value="" .../> 
 public ActionResult Index(string[] array){}

4,集合(除数组和字典之外的所有实现IEnumerable<T>接口的类型)

//请求表单范例
<input  name="[0].Name" type="text" value="" .../>
<input  name="[0].PhoneNo" type="text" value="" .../>
<input  name="[0].EmailAddress" type="text" value="" .../> 

<input  name="[1].Name" type="text" value="" .../>
<input  name="[1].PhoneNo" type="text" value="" .../>
<input  name="[1].EmailAddress" type="text" value="" .../> 
//范例
public ActionResult Action(IEnumerable<Contact> contacts){
foreach (Contact contact in contacts){}
}

5,字典(实现了接口IDictionary<TKey,TValue>的类型)

//请求表单范例
<input  name="[0].Key" type="text" value="Foo" .../>
<input  name="[0].Value.Name" type="text" value="" .../>
<input  name="[0].Value.PhoneNo" type="text" value="139" .../>
<input  name="[0].Value.EmailAddress" type="text" value="[email protected]" .../> 

<input  name="[0].Name" type="text" value="Bar" .../>
<input  name="[1].Value.Name" type="text" value="Bar" .../>
<input  name="[1].Value.PhoneNo" type="text" value="138" .../>
<input  name="[1].Value.EmailAddress" type="text" value="[email protected]" .../> 
public ActionResult Action(IDictionary<string, Contact> contacts)
     {
         foreach (string key  in contacts.Keys)
         {
             Response.Write(key + "<br/>");
             Contact contact = contacts[key];
             Response.Write(string.Format("&nbsp;&nbsp;&nbsp;&nbsp;{0}: {1}<br/>","Name", contact.Name));
             Response.Write(string.Format("&nbsp;&nbsp;&nbsp;&nbsp;{0}: {1}<br/>","PhoneNo", contact.PhoneNo));
             Response.Write(string.Format("&nbsp;&nbsp;&nbsp;&nbsp;{0}: {1}<br/><br/>", "EmailAddress", contact.EmailAddress));
         }
     }
时间: 2025-01-20 06:38:33

MVC复杂类型的模型绑定的相关文章

ASP.NET MVC ajax数组,模型绑定问题。

当我们在做批量删除的时候,很多情况下,我们只拿到checkbox 的Value.把checkbox中的value放在一个Array中.然后ajax到MVC的控制器中. 在ajax array的时候数据如下图: 可以发现,因为新增了一对儿中括号,模型绑定就失败了,我们可以想到重写MVC的BindModel 重写代码如下: public class JQueryBundler : DefaultModelBinder//这里要集成DefaultModelBinder { public overrid

ASP.NET MVC Model之二模型绑定

Asp.net mvc中的模型绑定,或许大家经常用,但是具体说他是怎么一回事,可能还是会有些陌生,那么,本文就带你理解模型绑定.为了理解模型绑定,本文会先给出其定义,然后对通过比,来得出使用模型绑定的方便.最后简单的模拟一下自定义模型绑定,让大家对模型绑定有进一步的认识. 一.模型绑定的概念 mvc framework中有一种技术,他就是模型绑定:使用 被浏览器发送的http请求里面数据 来创建.net对象的过程.接下来就让我们来看看模型绑定的好处. 二.模型绑定好处 第二部分,我们通过不使用模

《ASP.NET MVC 4 实战》学习笔记 11:模型绑定器与值提供器

一.创建自定义模型绑定器: 利用请求数据塑造模型对象并将对象传递给动作参数的过程称为模型绑定(Model Binding). 大多数时候动作参数是对象的主键或其他唯一标识符,因此我们可以不必在所有的动作中都放置一段重复的数据访问代码(下面代码“\\Before”部分),而是使用一个自定义的模型绑定器(下面代码“\\After”部分).它能够在动作执行之前加载存储对象,于是动作不再以唯一标识符而是以持久化的对象类型作为参数. // Before public ViewResult Edit (Gu

ASP.NET MVC学习之模型绑定(2)

3.手工调用模型绑定 很多情况下我们都是通过形参的方式接收来自http流中的数据,这看似是完美的,但是缺少了很多过程中的控制,所以我们就需要使用手工的方式进行绑定.下面我们通过一个例子来说明,首先打开Views/Home/Index.cshtml页面,并输入如下代码: 1 @{ 2 ViewBag.Title = "Index"; 3 } 4 5 @if (TempData.ContainsKey("msg")) 6 { 7 <h1> 8 @TempDa

ASP.NET Core MVC/WebAPi 模型绑定探索

前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用到了,你再去看理论性的文章时才会豁然开朗,这是我一直以来学习技术的方法.本文我们来讲解.NET Core中的模型绑定. 话题 在ASP.NET Core之前MVC和Web APi被分开,也就说其请求管道是独立的,而在ASP.NET Core中,WebAPi和MVC的请求管道被合并在一起,当我们建立控

[转] ASP.NET MVC 模型绑定的功能和问题

摘要:本文将与你深入探究 ASP.NET MVC 模型绑定子系统的核心部分,展示模型绑定框架的每一层并提供扩展模型绑定逻辑以满足应用程序需求的各种方法. 同时,你还会看到一些经常被忽视的模型绑定技术,并了解如何避免一些最常见的模型绑定错误. ASP.NET MVC 模型绑定通过引入自动填充控制器操作参数的抽象层.处理通常与使用 ASP.NET 请求数据有关的普通属性映射和类型转换代码来简化控制器操作. 虽然模型绑定看起来很简单,但实际上是一个相对较复杂的框架,由许多共同创建和填充控制器操作所需对

白话学习MVC(六)模型绑定

一.什么是模型绑定? 模型绑定存在的意义就是为Action的参数提供值,例如:如下表单中提交了数据,那么Action(即:Index)的参数Id,Name的值就是表单中对应的name属性相同的值,而表单提交的值是如何赋值给Action的参数的呢?模型绑定就是来完成从用户提交的请求中提取数据,并赋值给Action的参数.此例是从表单中的提取数据,并赋值给Action的参数,模型绑定还可以完成完成从地址Url.路由Route.上传文件等中获取数据,并赋值给Action相应的参数. <form id=

ASP.NET MVC 的自定义模型绑定

最近在研究 ASP.NET MVC 模型绑定,发现 DefaultModelBinder 有一个弊端,就是无法实现对浏览器请求参数的自定义,最初的想法是想为实体模型的属性设置特性(Attribute),然后通过取得设置的特性值对属性进行赋值,研究了好久 MVC 源码之后发现可以通过重写 DefaultModelBinder 的 BindProperty 方法可以达到预期的目的. ASP.NET MVC 中有一个自定义模型绑定特性 CustomModelBinderAttribute,打算通过重写

【转】ASP.NET Core MVC/WebAPi 模型绑定探索

前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用到了,你再去看理论性的文章时才会豁然开朗,这是我一直以来学习技术的方法.本文我们来讲解.NET Core中的模型绑定. 话题 在ASP.NET Core之前MVC和Web APi被分开,也就说其请求管道是独立的,而在ASP.NET Core中,WebAPi和MVC的请求管道被合并在一起,当我们建立控