Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可,福州.Net/ASP开发工程师工作,.Net/ASP开发工程师工资多少,.Net/ASP开发工程师创业,福建师范大学.Net/ASP开发工程师,闽江学院.Net/ASP开发工程师,闽江学院海峡学院.Net/ASP开发工程师,福州墨尔本理工职业学院.Net/ASP开发工程师,华南女子学院.Net/ASP开发工程师,福州大学.Net/ASP开发工程师,福建师范大学协和学院.Net/ASP开发工程师"/>

最近学习MVC5的一些小笔记4.Net/ASP开发工程师

/ 福建医科大学.Net/ASP开发工程师 / 2016-08-05

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" src="http://www.fishcoo.com/Uploads/Ueditor/Images/20160804/6360587090803752048870312.png" title="blob.png" alt="blob.png" width="744" height="456" style="font-family: 微软雅黑, 'Microsoft YaHei'; text-align: center; white-space: normal; width: 744px; height: 456px;"/>Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" src="http://www.fishcoo.com/Uploads/Ueditor/Images/20160804/6360587090803752048870312.png" title="blob.png" alt="blob.png" width="744" height="1" style="font-family: 微软雅黑, 'Microsoft YaHei'; text-align: center; white-space: normal; width: 744px; height: 1px;"/>

模板化的Helper Method:

MVC 提供了另外一套生成 Html 元素的 Helper Method,它可以通过 Model 信息来生成想要的 Html 标签。例如要生成一个文本框可以用 Html.Editor 方法,它是多行还是单行或者其他,可以在 View Model 中进行定制。它就像一个模板(Template),要怎么显示元素,大部分都在 Model 中指定。

模板化的 Helper Method 有下面几个:

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" data-media-type="image" src="/js/ueditor/themes/default/images/spacer.gif" data-attr-org-src-id="4B004AD8CDDF4FD2849D1B6E54C423FA" word_img="file:///C:/Users/XHL/AppData/Local/YNote/data/qq0E029CFFF04927854EB074E2BEE6F211/955d302ce6884ece8dacc96a0670a441/8de85517b4f9.png" style="background:url(/js/ueditor/lang/zh-cn/images/localimage.png) no-repeat center center;border:1px solid #ddd"/>

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" src="http://fishcooimg.chinazspeed.com/2016/08/1470331507004.png" title="blob.png" alt="blob.png"/>

<1>可以掩藏生成的Input字段

    [HiddenInput(DisplayValue=false)]

    public int id { get; set; }


<2>将id属性标记完全禁止,当模型绑定是会完全跳过该属性,提交表单时没有改属性的值返回

    [ScaffoldColumn(false)]

    public int id { get; set; }


<3>在HTML页面中显示ID而不是id

    [Display(Name="ID")]

    public int id { get; set; }


<4>设置一些数据类型如:

    [DataType(DataType.Date)]

    属性/字段

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" src="http://fishcooimg.chinazspeed.com/2016/08/1470331507005.png" title="blob.png" alt="blob.png"/>

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" data-media-type="image" src="/js/ueditor/themes/default/images/spacer.gif" data-attr-org-src-id="1AA9A6CFCC224F78A4732457C243C361" word_img="file:///C:/Users/XHL/AppData/Local/YNote/data/qq0E029CFFF04927854EB074E2BEE6F211/8ca34860421140428bcadd3292887a4a/clipboard.png" style="background:url(/js/ueditor/lang/zh-cn/images/localimage.png) no-repeat center center;border:1px solid #ddd"/>

<5>渲染一个属性的HTML,如:

    [UIHint("Boolean")]

    属性/字段

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" data-media-type="image" src="/js/ueditor/themes/default/images/spacer.gif" data-attr-org-src-id="D38F8980CA854A3CA1E531F25CB96755" word_img="file:///C:/Users/XHL/AppData/Local/YNote/data/qq0E029CFFF04927854EB074E2BEE6F211/e2ed6c79dcd344e8a01513a66054e146/clipboard.png" style="background:url(/js/ueditor/lang/zh-cn/images/localimage.png) no-repeat center center;border:1px solid #ddd"/>

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" src="http://fishcooimg.chinazspeed.com/2016/08/1470331507008.png" title="blob.png" alt="blob.png"/>

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" src="http://fishcooimg.chinazspeed.com/2016/08/1470331507009.png" title="blob.png" alt="blob.png"/>

Model。当 action invoker 需要调用一个 action 方法时,它先看这个 action 方法需要的参数,然后为每个参数找到和参数的类型对应的 Model Binder。对于我们这个简单示例,Action Invoker 会先检查 Index action 方法,发现它有一个 int 类型的参数,然后它会定位到负责给 int 类型提供值的 Binder,并调用该 Binder 的 BindModel 方法。该方法再根据 Action 方法参数名称从路由信息中获取 id 的值,最后把该值提供给 Action Invoker。</span></p><p><span style=

Model Binder 的运行机制

Model Binder(模型绑定器),顾名思义,可" data-media-type="image" src="/js/ueditor/themes/default/images/spacer.gif" data-attr-org-src-id="8352F1024D7B473CBD2C633FCE57C540" word_img="file:///C:/Users/XHL/AppData/Local/YNote/data/qq0E029CFFF04927854EB074E2BEE6F211/232c1f82d6d944f6a440a925f07dce8a/clipboard.png" style="background:url(/js/ueditor/lang/zh-cn/images/localimage.png) no-repeat center center;border:1px solid #ddd"/>

模型绑定(Model Binding):

Model Binding是HTTP 请求和 Action 方法之间的桥梁,它根据 Action 方法中的 Model 类型创建 .NET 对象,并将 HTTP 请求数据经过转换赋给该对象。


MVC 框架经过路由系统将 Url 的最后一个片段 /1 解析出来,将它作为 Index action 方法的参数来响应用户的请求。这里的 Url 片段值被转换成 int 类型的参数就是一个简单的 Model Binding 的例子,这里的 int 类型就是“Model Binding”中的“Model”。


Model Binding 过程是从路由引擎接收和处理请求后开始的。

在一个 MVC 中可以有多个 Model Binder,每个 Binder 都负责绑定一种或多或类型的


公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇