原来自定义模型绑定器还可以这么玩

我有个功能,需要绑定List<User>。我做了个测试:
试图:

@using (Html.BeginForm("save", "user"))
{
  <div>
  用户名:<input type="text" name="UserName" /><br />
  用户名:<input type="text" name="UserName" /><br />
  <input type="submit" value="submit" />
  </div>
}

模型:

public class User
{
  public string UserName { get; set; }
}

控制器:

public ActionResult Save(List<Models.User> users)
{
  return Content("success");
}

自定义模型绑定器:

public class UsersBinder : IModelBinder
{

  public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
  {
    string[] userNames = controllerContext.RequestContext.HttpContext.Request.Form.GetValues("username");

    List<Models.User> users = new List<Models.User>();
    Models.User user;
    foreach (var item in userNames)
    {
      user = new Models.User
      {
        UserName = item
      };
      users.Add(user);
    }

    return users;
  }
}

Global.asax.cs:

protected void Application_Start()
{
  AreaRegistration.RegisterAllAreas();

  WebApiConfig.Register(GlobalConfiguration.Configuration);
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);

  ModelBinders.Binders.Add(typeof(List<Models.User>), new Extend.UsersBinder());
}

这样通过自定义模型绑定器,当客户端有N个User视图模型的时候,可以在控制器的方法里自动绑定,实现了我想要的效果。

时间: 2024-12-16 06:06:40

原来自定义模型绑定器还可以这么玩的相关文章

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

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

自定义模型绑定系统

一.创建自定义的值提供器 1.通过创建自定义的值提供器,我们可以把自己的数据源添加到模型绑定过程.而值提供器需要实现IValueProvider接口.下面是此接口的定义 namespace System.Web.Mvc { /// <summary> /// Defines the methods that are required for a value provider in ASP.NET MVC. /// </summary> public interface IValue

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

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

MVC重写DefaultModelBinder实现自定义模型绑定

在编写前台页面的时候为了使url传递参数的简短,比如personId="1"  我们通过url传递成pid=1  那么在后台action方法接受的模型Person类 的属性为personid 则mvc就不能把值填充到实体类里面 所以我们要重写mvc底层填充模型的类  ,自定义一个类 继承DefaultModelBinder  重写BindProperty 方法 方法内部实现见下图 做完上面 还要在全局配置文件中配置.将我们mvc填充模型的类 替换成我们写的类 如下图: 防止以后看不懂啦

P23 自定义Model绑定器

原文地址:https://www.cnblogs.com/wangjunwei/p/12547706.html

ASP.NET MVC 4 (九) 模型绑定

模型绑定指的是MVC从浏览器发送的HTTP请求中为我们创建.NET对象,在HTTP请求和C#间起着桥梁的作用.模型绑定的一个最简单的例子是带参数的控制器action方法,比如我们注册这样的路径映射: routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Inde

ASP.NET MVC——模型绑定

这篇文章我们来讲讲模型绑定(Model Binding),其实在初步了解ASP.NET MVC之后,大家可能都会产生一个疑问,为什么URL片段最后会转换为例如int型或者其他类型的参数呢?这里就不得不说模型绑定了.模型绑定是指,用浏览器以HTTP请求方式发送的数据来创建.NET对象的过程.每当定义具有参数的动作方法时,一直是在依赖着这种模型绑定过程. 准备项目 我们先来创建一个MVC项目,名叫MVCModels,并在Models文件夹中创建一个新的类文件Person. 1 using Syste

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

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

[转]ASP.NET MVC 4 (九) 模型绑定

本文转自:http://www.cnblogs.com/duanshuiliu/p/3706701.html 模型绑定指的是MVC从浏览器发送的HTTP请求中为我们创建.NET对象,在HTTP请求和C#间起着桥梁的作用.模型绑定的一个最简单的例子是带参数的控制器action方法,比如我们注册这样的路径映射: routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: n