首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏大内老A

    ASP.NET MVC的Model元数据提供机制的实现

    在前面的介绍中我们已经提到过表示Model元数据的ModelMetadata对象最终是通过一个名为ModelMetadataProvider的组件提供的,接下来我们着重讨论基于ModelMetadataProvider 1: public abstract class ModelMetadataProvider 2: { 3: public abstract IEnumerable<ModelMetadata > GetMetadataForProperties( object container, Type containerType); 4: public abstract ModelMetadata 值得一提的是,当通过调用CreateMetadata创建出ModelMetadata之后,会从特性列表中筛选出实现了IMetadataAware接口的特性,并将该ModelMetadata对象作为参数调用它们的 在重写的CreateMetadata方法中,我们先调用基类的同名方法得到一个ModelMetadata对象。

    84060发布于 2018-01-15
  • 来自专栏大内老A

    ASP.NET MVC Model元数据及其定制: Model元数据的定制

    1: ModelMetadata foo = GetModelMetadata<Model>("Foo"); 2: ModelMetadata bar = GetModelMetadata 1: ModelMetadata foo = GetModelMetadata<Model>("Foo"); 2: ModelMetadata bar = GetModelMetadata 它们共同控制着ModelMetadata如下所示的IsReadOnly属性。 1: ModelMetadata foo = GetModelMetadata<Model>("Foo"); 2: ModelMetadata bar = GetModelMetadata 1: ModelMetadata foo = GetModelMetadata<Model>("Foo"); 2: ModelMetadata bar = GetModelMetadata

    2.1K50发布于 2018-03-02
  • 来自专栏王清培的专栏

    .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)

    简单理解为面向特定领域的语言;该语言主要用来解决特定领域的实现问题,刚开始我们可以会把这个概念定义的过于庞大,希望能通过DSL解决一切领域问题,其实这是错误的;DSL其实是一小部分领域问题的提炼,如:我们这里的将ModelMetadata 设置特性从原来定义在ViewModel上的迁移到外部去,这其中的主要问题域就是将ModelMetadata设置项与View绑定,而不是ViewModel; 只有先准确的找到问题域之后我们才能设计DSL来充分的表达这个问题域 目前对ViewModel中设置的元数据控制特性都会作用于使用该ViewModel的所有View,我们要解决的问题是将上图中的ModelMetadata域提取出去与View进行绑定,从而得到一个干净的ViewModel 因为你已经可以控制其获取元数据的过程,这在紧要关头可能就是救命稻草,这里只是一点扩展性的介绍,当然要看具体的需求了,不过这确实是一个好的思路; 2.1.实现元数据提供程序(简单示例) View、ViewModel、ModelMetadata public View View { get; set; } 19 public ViewModel ViewModel { get; set; } 20 public ModelMetadata

    86150发布于 2018-01-08
  • 来自专栏大内老A

    通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[下篇]:参数绑定

    ModelMetada 模拟框架利用如下这个ModelMetadata对模型元数据进行了极大的简化。 ModelMetadata提供了两个静态工厂方法来完成上述两种针对ModelMetadata对象的创建。 ModelMetadata CreateByProperty(PropertyInfo property) => new ModelMetadata(null, property); } ModelMetadata = modelName; ModelMetadata = modelMetadata; ValueProvider = valueProvider; } 具体来说,BindArgumentsAsync方法会利用根据当前参数创建描述目标模型元数据的ModelMetadata对象。

    1.6K50发布于 2020-04-01
  • 来自专栏王清培的专栏

    .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)

    阅读目录: 4.ModelMetadataModelMetadata元数据如何支撑Model与View之间的组合关系) 4.1.ModelMetadata元数据结构(元数据与数据实体的结构关系) 4.2 ,当然这取决Model的使用方向,不同的使用方向会有不同类型的元数据,我们这里的ModelMetadata是针对View显示相关的元数据;ModelMetadata中绝大部分元数据是用来作为最终在View ViewModel的ModelMetadata来操纵最终的呈现; 4.1.ModelMetadata元数据结构(元数据与数据实体的结构关系) 图1:Customer ViewModel ? 图2:Customer ModelMetadata ? 也是这种包含的层次结构,在每个ModelMetadata内部都有一个类型为IEnumerable<ModelMetadata>的Properties属性来引用它的下级ModelMetadata,这就形成了一个无限嵌套的元数据表示结构

    1.3K50发布于 2018-01-08
  • 来自专栏大内老A

    ASP.NET MVC Model元数据及其定制: 初识Model元数据

    ASP.NET MVC的Model元数据通过类型ModelMetadata表示。 ModelMetadata的定义可以看出来。 ,表示用于描述属性/字段成员的ModelMetadata集合。 由于基于类型的ModelMetadata和基于数据成员的ModelMetadata是一种包含关系,我们可以将前者称为后者的容器(Container)。 ? ModelMetadata对象则将对应的属性值作为自己的Model。

    1.2K90发布于 2018-01-15
  • 来自专栏王清培的专栏

    .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(一)

    .开篇介绍 2.Model与View的使用关系(数据上下文DataContext与View呈现) 3.Metadata元数据驱动设计(如何使用中间层元数据来驱动最终的行为) 4.ASP.NETMVC ModelMetadataModelMetadata元数据如何支撑Model与View之间的组合关系) 1】开篇介绍 这篇文章让我们一起来学习一下有关Asp.netMvc中的Mode元数据的相关设计和围绕元数据的一些其他对象模型 的高速桥梁的,让Model与View可以到做1对N的搭配关系,在大型站点中ViewModel一般只有固定的几种,但是View可能会有成千种,如何做到这种高度适配,这就是自定义模板的功能,当然一切都建立在ModelMetadata ,当然也可以通过切割成三组元数据对象模型,通过继承体系包含起来;那么ModelMetadata需要描述三个方向上的所需要的数据集合,Model本身就是一中数据,而通过使用ModelMetadata来抽象的描述第二个层面上的数据 (ModelMetadata元数据如何支撑Model与View之间的组合关系) 未完待续,敬请关注......

    85560发布于 2018-01-08
  • 来自专栏大内老A

    ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProviders

    实现在ModelValidatorProvider中的ModelValidator提供机制是基于Model元数据和Controller上下文的,实际上用于描述Model元数据的ModelMetadata 定义在Validate方法中的验证逻辑是这样的:CompositeModelValidator通过在构造函数中初始化的表示验证对象类型的Model元数据的ModelMetadata对象的Properties 然后遍历该列表的每个ModelMetadata对象,调用其GetValidators方法得到一组用于验证属性值得ModelValidator列表,然后使用该ModelValidator列表依次对相应的属性值进行验证 在Action方法Index中,我们使用当前的ModelMetadataProvider创建了基于Contact类型的ModelMetadata,然后调用ModelValidator的静态方法GetValidator 方法得到基于该ModelMetadata和ControllerContext的ModelValidator对象(一个CompositeModelValidator对象)。

    2.1K60发布于 2018-01-15
  • 来自专栏大内老A

    ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider

    ValidatableFactories; 9: 10: protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata attributes); 11: } 12:  13: public delegate ModelValidator DataAnnotationsModelValidationFactory(ModelMetadata attribute); 14:  15: public delegate ModelValidator DataAnnotationsValidatableObjectAdapterFactory(ModelMetadata DataAnnotationsModelValidator的类型是另外一个类型为DataAnnotationsValidatableObjectAdapterFactory的委托,该委托根据ModelMetadata RegisterDefaultAdapter用于注册一个默认的针对验证特性的ModelValidator类型,该类型必须具有一个参数类型列表为ModelMetadata、ControllerContext

    1.2K80发布于 2018-01-15
  • 来自专栏Core Net

    ASP.NET Core 2.2 十九. 你扔过来个json,我怎么接

    modelMetadata) { ModelBinder = modelBinder; ModelMetadata = modelMetadata; } public IModelBinder ModelBinder { get; } public ModelMetadata ModelMetadata { get; } } 通过遍历目标Action的所有参数actionDescriptor.Parameters,根据参数逐一匹配一个对应定的处理对象 = bindingInfo.ModelMetadata; if (! modelMetadata.IsBindingAllowed) { continue;

    90330发布于 2019-03-11
  • 来自专栏ASP.NET MVC5 后台权限管理系统

    ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证

    maxMum); } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata maxStr); } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata minStr); } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata result; } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata ", name); } public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata

    4.5K50发布于 2018-01-16
  • 来自专栏大内老A

    ASP.NET MVC的Model元数据与Model模板:将”ListControl”引入ASP.NET MVC

    ListAttribute实现了IMetadataAware接口,在实现的OnMetadataCreated方法中将在构造函数中指定的代表列表名称的ListName属性添加到表示Model元数据的ModelMetadata 四个具体的列表特性重写了OnMetadataCreated方法,并在此基础上将ModelMetadata的TemplateHint分别设置为DropdownList、ListBox、RadioButtonList 7: this.ListName = listName; 8: } 9: public virtual void OnMetadataCreated(ModelMetadata 45: : base(listName) 46: { } 47:  48: public override void OnMetadataCreated(ModelMetadata 59: : base(listName) 60: { } 61:  62: public override void OnMetadataCreated(ModelMetadata

    5.8K60发布于 2018-01-15
  • 来自专栏全栈程序员必看

    XML转换_xml文件转化为excel格式

    > <ModelMetadata version="1"> <SRS>EPSG:4326</SRS> <! 1222.02055172,31222.003238869999993,122292.25000000134497</SRSOrigin> <Texture> <ColorSource>Visible</ColorSource> </Texture> </ModelMetadata xmlhttp.send(); xmlDoc=xmlhttp.responseXML; x = xmlDoc.getElementsByTagName("ModelMetadata

    1.4K40编辑于 2022-09-23
  • 来自专栏大内老A

    ASP.NET MVC下的四种验证编程方式[续篇]

    我们知道ASP.NET MVC大都采用Provider的模式来提供相应的组件,比如描述Model元数据的ModelMetadata通过对应的ModelMetadataProvider来提供,实现Model ModelValidatorProvider 2: { 3: public abstract IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context); 11: } 值得一提的是用于描述Model元数据的ModelMetadata类型具有如下一个GetValidators 1: public class ModelMetadata 2: { 3: //其他成员 4: public virtual IEnumerable<ModelValidator ModelValidatorProvider 2: { 3: public override IEnumerable<ModelValidator> GetValidators(ModelMetadata

    1.3K80发布于 2018-01-15
  • 来自专栏大内老A

    ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator

    DataAnnotationsModelValidator : ModelValidator 2: { 3: public DataAnnotationsModelValidator(ModelMetadata DataAnnotationsModelValidator<RequiredAttribute> 2: { 3: public RequiredAttributeAdapter(ModelMetadata : DataAnnotationsModelValidator<RangeAttribute> 8: { 9: public RangeAttributeAdapter(ModelMetadata DataAnnotationsModelValidator<RegularExpressionAttribute> 14: { 15: public RegularExpressionAttributeAdapter(ModelMetadata DataAnnotationsModelValidator<StringLengthAttribute> 20: { 21: public StringLengthAttributeAdapter(ModelMetadata

    1.4K110发布于 2018-01-15
  • 来自专栏大内老A

    ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider

    ModelValidatorProvider 2: { 3: public abstract IEnumerable<ModelValidator> GetValidators(ModelMetadata GetValidators方法具有两个参数,类型ModelMetadata的metadata参数用于或者相应的验证规则,而参数context则是表示当前Model绑定上下文的ModelBindingExecutionContext GetTypeDescriptor(Type type); 4: public sealed override IEnumerable<ModelValidator> GetValidators(ModelMetadata ControllerContext context); 5: protected abstract IEnumerable<ModelValidator> GetValidators(ModelMetadata GetValidators(Contact contact, ModelValidatorProvider validatorProvider) 22: { 23: ModelMetadata

    1.9K10编辑于 2022-05-09
  • 来自专栏大内老A

    ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略

    HtmlHelper或者HtmlHelper<TModel>的模板方法对整个Model或者Model的某个数据成员以某种模式(显示模式或者编辑模式)进行呈现的时候,通过预先创建的代表Model元数据的ModelMetadata 通过《初识Model元数据》针对Model元数据定义的介绍,我们知道通过DataTypeAttribute特性对目标元素设置的数据类型最终会反映在表示Model元数据的ModelMetadata对象的DataTypeName 此外,对于某些设置的数据类型,比如Date、Time、Duration和Currency等,还会随之创建一个DisplayFormatAttribute应用到ModelMetadata上。 那么ModelMetadata的DataTypeName属性对目标元素的最终呈现具有怎样的影响呢? 实际上在模板匹配的过程中会将ModelMetadata的DataTypeName属性当作模板名称来看待,所以下面两种形式的Model类型定义可以看成是等效的。

    2K60发布于 2018-01-15
  • 来自专栏大内老A

    ASP.NET MVC Model元数据及其定制:一个重要的接口IMetadataAware

    当Model元数据被创建出来后,会先获取上述的这一系列标注特性对其进行初始化,然后获取应用在目标元素上所有实现了IMedataAware接口的特性,并将初始化的ModelMetadata对象作为参数调用 中] 1: public interface IMetadataAware 2: { 3: void OnMetadataCreated(ModelMetadata metadata 这个针对HTML标记的验证通过ModelMetadata的RequestValidationEnabled来控制,如下面的代码片断所示,这是一个布尔类型的可读写属性。 1: public class ModelMetadata 2: { 3: //其他成员 4: public virtual bool RequestValidationEnabled 具体来说,我们根据设置的DisplayName和ResourceType属性解析出最终作为目标元素显示名称的文本作为ModelMetadata的DisplayName属性值。

    1.2K60发布于 2018-01-15
  • 来自专栏云深之无迹

    大疆智图 三维低精度建模

    > <ModelMetadata version="1"> <! 0,0,1108.9300000000001</SRSOrigin> <Texture> <ColorSource>Visible</ColorSource> </Texture> </ModelMetadata

    1.2K30发布于 2021-10-20
  • 来自专栏张善友的专栏

    ASP.NET MVC扩展库

    ModelMetadata Fluent Configuration:支持复合ModelMetadata provider, 默认使用DataAnnotationsModelMetadataProvider

    1.1K70发布于 2018-01-22
领券