MVC项目开发中那些用到的知识点(MVC IModelBinder)

简介: 前言 本节主要来记录一下客户端发送请求的参数自动绑定为强类型的成员属性或方法参数也就是Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数。 IModelBinder  用于进行Model绑定的ModelBinder对象实现了接口IModelBinder。

前言

本节主要来记录一下客户端发送请求的参数自动绑定为强类型的成员属性或方法参数也就是Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数。

IModelBinder

 用于进行Model绑定的ModelBinder对象实现了接口IModelBinder。如下面的代码片断所示,IModelBinder接口具有唯一的BindModel方法用于实现针对某个参数的绑定操作,该方法的返回值表示的就是最终作为参数值的对象。用于进行Model绑定的ModelBinder对象实现了接口IModelBinder。如下面的代码片断所示,IModelBinder接口具有唯一的BindModel方法用于实现针对某个参数的绑定操作,该方法的返回值表示的就是最终作为参数值的对象。

    // 摘要:
    //     定义模型联编程序所需的方法。
    public interface IModelBinder
    {
        // 摘要:
        //     使用指定的控制器上下文和绑定上下文将模型绑定到一个值。
        //
        // 参数:
        //   controllerContext:
        //     控制器上下文。
        //
        //   bindingContext:
        //     绑定上下文。
        //
        // 返回结果:
        //     绑定值。
        object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext);
    }

IModelBinder的BindModel方法接受两个参数,一个是表示当前的Controller上下文,另一个是表示针对当前Model绑定的上下文,通过类型ModelBindingContext表示。在Controller初始化的时候,Controller上下文已经被创建出来,所以我们只要能够针对当前的Model绑定创建相应的ModelBindingContext,我们就能使用基于某个参数的ModelBinder得到对应的参数值。关于ModelBindingContext的创建我们会在后续部分进行的单独介绍,我们先来介绍一下ModelBinder的提供机制。

实现IModelBinder

 新建UserInfoModelBinder类继承接口并实现IModelBinder

        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            object obj = Activator.CreateInstance(bindingContext.ModelType);
            foreach (PropertyInfo p in bindingContext.ModelType.GetProperties())
            {
               ValueProviderResult vpResult=  bindingContext.ValueProvider.GetValue(p.Name);
               if (vpResult != null)
               {
                   object value = vpResult.ConvertTo(p.PropertyType);
                   p.SetValue(obj, value, null);
               }
            }
            return obj;
        }

这里有通过Activator.CreateInstance反射来定义一个对象。
通过在HomeController.cs中进行调用

    public class HomeController : Controller
    {
        public ActionResult Test([ModelBinder(typeof(UserInfoModelBinder))]UserInfo userInfo)
        {
            return Content("Name:" + userInfo.Name + " Age:" + userInfo.Age);
        }

上面的bindingContext.ModelType其实就是Test的Action参数类型UserInfo。
接下来就是运行程序,通过MVC中的路由机制http://localhost:25943/Home/Test?Name=aehyok&age=25

 

 

目录
相关文章
|
6月前
|
前端开发 Java 数据格式
10个知识点让你读懂spring MVC容器
随着 Spring Boot 逐步全面覆盖到我们的项目之中,我们已经基本忘却当年经典的 Servlet + Spring MVC 的组合,那让人熟悉的 web.xml 配置。而本文,我们想先抛开 Spring Boot 到一旁,回到从前,一起来看看 Servlet 是怎么和 Spring MVC 集成,怎么来初始化 Spring 容器的。
61 1
|
XML 缓存 JSON
Spring MVC 阅读官方文档知识点总结
Spring MVC 阅读官方文档知识点总结
187 8
|
前端开发 Java API
【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发2
【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发2
112 0
【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发2
|
前端开发 数据库 容器
MVC知识点01
MVC知识点01
115 0
MVC知识点01
|
传感器 开发框架 前端开发
MVC知识点02
MVC知识点02
101 0
MVC知识点02
|
前端开发 Java 数据库
【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发1
【Spring MVC】(三)搭建Spring MVC+Spring+JDBC框架以及在此框架上进行项目开发1
232 0
|
存储 SQL 开发框架
WinForm,MVC知识点
WinForm,MVC知识点
366 0
下一篇
无影云桌面