Asp.net Vnext ModelBinding

Model Binding



Model binding(绑定)简单来说就是通过遍历ValueProvider(值提供者)获取的数据对Action参数进行赋值.

在学习本篇教程,应对model binding有基础了解。

DefaultPropertyBindingPredicateProvider



DefaultPropertyBindingPredicateProvider:提供一种基于表达式的方法来提供包括的属性。

    public class DefaultPropertyBindingPredicateProvider<TModel> : IPropertyBindingPredicateProvider where TModel : class
        {
        public DefaultPropertyBindingPredicateProvider();

        public virtual string Prefix { get; }
             public virtual Func<ModelBindingContext, string, bool> PropertyFilter { get; }

        public virtual IEnumerable<Expression<Func<TModel, object>>> PropertyIncludeExpressions { get; }
        }

这个类有三个属性:

Prefix 表示前缀名
PropertyFilter :属性过滤
PropertyIncludeExpressions :属性包括表达式来看下怎么用实例代码



     private class ExcludeUserPropertiesAtParameter : DefaultPropertyBindingPredicateProvider<User>
        {
            Func<ModelBindingContext, string, bool> _defaultFilter1 =
            (context, propertyName) => false;

         public   ExcludeUserPropertiesAtParameter()
                {

                }
            public override string Prefix
            {
                get
                {
                    return "user";
                }
            }

            public override IEnumerable<Expression<Func<User, object>>> PropertyIncludeExpressions
            {

                get
                {

                   yield return m => m.RegisterationMonth;
                   yield return m => m.UserName;
                }
            }
        }
控制器
  public class BindAttributeController : Controller
    {
        public User EchoUser([Bind(typeof(ExcludeUserPropertiesAtParameter))] User user)
        {
            return user;
        }

User实体



 public class User
    {
        [Required]
        public int Id { get; set; }
        public int Key { get; set; }

        [Required]
        public string RegisterationMonth { get; set; }
        public string UserName { get; set; }

        public Address Address { get; set; }
    }


Prefix 前缀名是user,也就是说请求id必需加上user作为前缀
PropertyIncludeExpressions:属性包括:
get
{ yield return m => m.RegisterationMonth; yield return m => m.UserName; }
表示:支队这个属性进行赋值。
我们来看看PropertyFilter作用



   private class ExcludeUserPropertiesAtParameter : DefaultPropertyBindingPredicateProvider<User>
        {
            Func<ModelBindingContext, string, bool> _defaultFilter1 =
            (context, propertyName) => false;

         public   ExcludeUserPropertiesAtParameter()
                {

                }
            public override string Prefix
            {
                get
                {
                    return "user";
                }
            }
            public override Func<ModelBindingContext, string, bool> PropertyFilter
                {
                get
                    {
                    return _defaultFilter1;
                    }
                }

        }

_defaultFilter1 表达式一直返回false

全部没有赋值,
PropertyFilter:
PropertyIncludeExpressions等于null propertyFilter 将默认返回true.

FromQueryAttribute
FromRouteAttributeFromFormAttribute
 
				
时间: 2024-10-21 18:37:28

Asp.net Vnext ModelBinding的相关文章

Asp.net Vnext &amp; MVC6 系列

vs 2015  rc  vnext  1.0.0-beta4 ,本系列还将持续继续更新 Asp.net Vnext 调试源码 Asp.net Vnext 自定义日志 Asp.net Vnext 中间件实现基本验证 Asp.net Vnext 实现IView Asp.net Vnext TagHelpers Asp.net Vnext Routing Asp.net Vnext IValueProvider Asp.net Vnext ModelBinding Asp.net Vnext 模块化

POCO Controller 你这么厉害,ASP.NET vNext 知道吗?

写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 POJO 与 PO.VO 的区别 POJO 的扩展 POCO VS DTO Controller 是什么? 关于 POCO Controller POCO Controller 应用 识别 POCO Controller 简单 POCO Controller IActionResultHelper IModelMetadataProvider.ViewDataDictionary IActionDiscovery

微软 ASP.NET vNext MVC6 Web API3 新特性

今天讲课系统NET vNext 新特性ASP.NET vNext新特性, MVC6, Web API 3.0新特性,Roslyn编译器 ..NET Native.nGEN.JIT64和RyuJIt新特性.Visual Studio 2014新特性,并且做了Demo 你知道下一代.NET新变化,还有他们之间的关系吗?@微软中国MSDN @微软中国TechNet @微软中国 微软实战训练营 ! 国内最新的课程!贴近中外名企一线开发! http://54peixun.com/MSTrainingCam

初次开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、目前性能还不够好

继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-host测试,但是官方说运行环境的MONO版本至少需要3.4.1,我去年买了个表,至本文发布为止,你让我下地狱去找3.4.1吗,硬着头皮用3.4.0搞了一晚上,MAC一直停留在 httpapi.dll出错,Ubuntu Server 12.0.4 是不认其中的几个DLL包,具体哪几个也忘了,过段时间有了稳定版本再

Asp.net vNext 学习之路(三)

asp.net vNext 对于构建asp.net 程序带来了一些重大的改变,让我们开发asp.net 程序的时候更加的方便和高效. 1,可以很容易的去管理客户端的包比如jquery,bootstrap,angular. 2,能够自动的完成less 的编译,javascript 的压缩和单元测试. 3,在web 开发社区有非常丰富的工具生态系统. vs 2015 中有一些自动化的编译工具来支持一些第三方的工具, 1,Bower,可以看作是web 应用的包管理工具,bower 可以安装和恢复客户端

ASP.NET vNext 微笔记

关心 ASP.NET vNext 的人可能已经读过相关文章,例如:ASP.NET vNext @ 2014.那么,你可能已经知道,ASP.NET vNext 摆脱了 System.Web.DLL,把 Web API 合并至 MVC 框架,而且更全面地采用 task-based 异步程序模型.因此,我们应该可以期待,采用 vNext 应用程序将会更模块化.有更好的性能.更容易编写异步程序(搭配 C# 的 async/await 语法),而且更容易延展(scale). 此外,同样重要的是知道 ASP

Asp.net vnext的IIS部署

微软前段时间推出asp.net vnext,自个也尝试了一把,也写了几篇关于vnext特性的博客,如下. 但一直有个困扰的问题,asp.net vnext如何在iis部署,因为整个目录结构跟之前有了很大的不同,用f5直接运行启动iis express很方便查看结果,但如果部署到线上,就要用到iis,之前一直没找到合适的方案,很是郁闷,终于在昨天搞到深夜将这个问题解决了,那本文就是讲解如何通过vs2015部署vnext web项目. 大致的方案是通过http://codedbeard.com/as

Mac OS X上编写 ASP.NET vNext(一)KRE环境搭建

最新的asp.net vnext已经可以支持在mac上运行了,当然用的是mono.相比linux来说,mac的安装略显繁琐.对于大部分用Windows开发asp.net的程序员来说,初次配置还是很费时的.我这里列出详细安装步骤,方便大家开发的同时,也给自己做个备忘. 要运行.Net程序,需要新的KRE环境,至少需要安装Xcode,Homebrew 和 ASP.NET vNext Command Line Tools.当然为了日后开发方便,我建议大家一并安装yeoman,为了安装yeoman,我们

兼容Mono的下一代云环境Web开发框架ASP.NET vNext

微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cloud-first)的新战略思想.Scott Hanselman发布博客对ASP.NET vNext进行了简要介绍.而且ASP.NET入驻Github 下一代ASP.NET将全部开源,写下本文记录下这个时刻. 微软在今年的Build大会上成立.NET开源基金会和以下这些产品的发布: .NET Nat