首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用attributes向具有ASP.NET核心的附加值集合ModelMetadata添加项?

在ASP.NET Core中,可以使用attributes向具有ASP.NET Core的附加值集合ModelMetadata添加项。ModelMetadata是一个用于描述模型属性的元数据类,可以通过自定义属性来添加额外的元数据。

要向ModelMetadata添加项,可以使用以下步骤:

  1. 创建一个自定义属性类,该类继承自Attribute类,并且实现IModelMetadataAdditionalValues接口。这个接口定义了一个AdditionalValues属性,它是一个字典,用于存储附加的元数据项。
代码语言:txt
复制
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;

public class CustomMetadataAttribute : Attribute, IModelMetadataAdditionalValues
{
    public void Process(ModelMetadataEntry entry, string key)
    {
        // 添加自定义的元数据项到AdditionalValues字典中
        entry.AdditionalValues[key] = "Custom Value";
    }
}
  1. 在模型属性上应用自定义属性。
代码语言:txt
复制
public class MyModel
{
    [CustomMetadata]
    public string MyProperty { get; set; }
}
  1. 在应用程序的Startup类中,使用ModelMetadataProvider来注册自定义的ModelMetadataDetailsProvider。
代码语言:txt
复制
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .AddMvcOptions(options =>
            {
                options.ModelMetadataDetailsProviders.Add(new CustomMetadataProvider());
            });
    }
}
  1. 创建一个自定义的ModelMetadataDetailsProvider类,该类继承自DefaultModelMetadataDetailsProvider,并且重写CreateMetadata方法,在该方法中处理自定义属性。
代码语言:txt
复制
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;

public class CustomMetadataProvider : DefaultModelMetadataDetailsProvider
{
    public override void CreateMetadata(ModelMetadataCreationContext context)
    {
        base.CreateMetadata(context);

        var attributes = context.Attributes;
        var modelMetadata = context.Metadata;

        foreach (var attribute in attributes)
        {
            if (attribute is CustomMetadataAttribute customAttribute)
            {
                customAttribute.Process(modelMetadata, "CustomKey");
            }
        }
    }
}

现在,当使用ModelMetadata获取模型属性的元数据时,可以通过AdditionalValues属性获取到添加的自定义元数据项。

代码语言:txt
复制
var myModelMetadata = modelMetadataProvider.GetMetadataForType(typeof(MyModel));
var myPropertyMetadata = myModelMetadata.Properties.FirstOrDefault(p => p.PropertyName == "MyProperty");

if (myPropertyMetadata != null)
{
    if (myPropertyMetadata.AdditionalValues.TryGetValue("CustomKey", out var customValue))
    {
        // 使用自定义元数据项
        Console.WriteLine(customValue);
    }
}

这样,就可以使用attributes向具有ASP.NET Core的附加值集合ModelMetadata添加项了。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云对象存储(COS)。

  • 腾讯云云服务器(CVM):提供可扩展的云服务器实例,适用于各种计算场景。详情请参考:腾讯云云服务器
  • 腾讯云对象存储(COS):提供高可靠、低成本的对象存储服务,适用于存储和处理大规模非结构化数据。详情请参考:腾讯云对象存储
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

    前面篇文章我们分别介绍用真正用于实施Model验证ModelValidator(《ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidator》),以及用于提供...》),那么对于ASP.NET MVCModel验证体系来说,最终是通过怎样方式对ModelValidatorProvider进行注册,又是如何利用它们来创建相应ModelValidator来实施Model...,验证失败得到ModelValidationResult对象被添加到最终返回ModelValidationResult集合中。...列表对指定数据对象实施验证,验证失败得到ModelValidationResult对象被添加到最终返回ModelValidationResult集合中。...1: N/A: Contact ASP.NET MVC以ModelValidator为核心Model验证体系: ModelValidator ASP.NET MVC以ModelValidator为核心

    1.6K60

    通过实例模拟ASP.NET MVCModel绑定机制:集合+字典

    在本系列前面两篇文章(《简单类型+复杂类型》、《数组》)我们通过创建实例程序模拟了ASP.NET MVC默认使用DefaultModelBinder对简单类型、复杂类型以及数组对象Model绑定...现在我们按照相同方式来分析基于集合和字典类型Model绑定是如何实现。[源代码从这里下载][本文已经同步到《How ASP.NET MVC Works?》...和基于数组Model绑定类似,ValueProvider可以将多个同名数据作为集合元素,基于索引(基零整数和字符串)数据命名方式同样适用。...,这充分证明了我们自定义DefaultModelBinder具有针对集合绑定能力。...MVCModel绑定机制:简单类型+复杂类型 通过实例模拟ASP.NET MVCModel绑定机制:数组 通过实例模拟ASP.NET MVCModel绑定机制:集合+字典

    1.8K70

    使用asp.net 2.0CreateUserwizard控件如何自己数据表中添加数据

    在我们应用系统中,asp.net 2.0用户表中数据往往不能满足我们需求,还需要增加更多数据,一种可能解决方案是使用Profile,更普遍方案可能是CreateUserwizard中添加数据到我们自己表中...在结合asp.net 2.0用户管理系统设计保存用户额外信息表中主键是用户表ID外键,你可以获取ID从Membershipuser属性Provideruserkey....当你建立用户membershipuser对象,可以使用Provideruserkey获取用户主键值(一个GUID值): CreateUserWinardOnCreatedUser事件中可以获取你要添加额外用户信息和...下面是一个如何使用例子: protected void CreateUserWizard1_CreatedUser( object sender, System.EventArgs e) {...} Membership相关文章: ASP.NET 2.0 Membership asp.net 2.0 用户管理功能结构 关于Membership设置 (翻译)怎么在ASP.NET

    4.6K100

    通过实例模拟ASP.NET MVCModel绑定机制:数组

    [续《通过实例模拟ASP.NET MVCModel绑定机制:简单类型+复杂类型]》]基于数组和集合类型Model绑定机制比较类似,对于绑定参数类型或者参数类型某个属性为数组或者集合,如果ValueProvider...如果绑定目标对象是一个数组或者集合,匹配同名数据将会作为目标对象元素。...具有针对这两个参数数据源,从上面的代码片断所示,针对参数foo和bar数据具有相同名称(foo和bar.baz)。...索引数据名称为“index”,并且与数组元素数据具有相同前缀。...MVCModel绑定机制:简单类型+复杂类型 通过实例模拟ASP.NET MVCModel绑定机制:数组 通过实例模拟ASP.NET MVCModel绑定机制:集合+字典

    3.3K90

    快速入门系列--MVC--04模型

    使用System.Web.Mvc.ModelMetadata来表示Model元数据,并且ModelMetadata是一种迭代,支持自包含结构,有点像组合模式。...即使不使用Razor视图引擎,直接使用静态HTML5页面,该模块仍然不可或缺。现在简单介绍一下ASP.NET MVC中相关Model绑定。     ...ParameterDescriptor 其中属性ParameterBindingInfo最为关键,实际包含ModelBinder对象,该对象是整个绑定模块核心,同时Include,Exclude集合用于显示设置参与...这儿仍然使用Provider模式来提供相应组件,ModelValidatorProvider类具有GetValidators(ModelMetadata metadata, ControllerContext...同时注意可以通过ModelStateAddModelError方法添加错误信息,EditorForModel扩展方法在使用时会默认显示验证错误时信息。

    92550

    ASP.NET MVCModel元数据与Model模板:预定义模板

    在调用这些方法时候,如果我们指定了一个具体通过分部View定义模板,或者对应ModelMetadataTemplateHint属性具有一个模板名称,会自动采用该模板来生成最终HTML。...由于Model具有显示和编辑两种呈现模式,所以定义在ASP.NET MVC内部默认模版分为这两种基本类型。接下来我们就逐个介绍这些预定义模版以及最终HTML呈现方式。...布尔类型这种默认呈现方式源自“Boolean”模板默认被使用。...如下面的代码片断所示,这个hidden元素具有与CheckBox相同名称,但是值为False,它存在目的在于当CheckBox没有被勾选情况下通过对应hidden元素服务区提交相应值(False...对应采用该模板类型为集合(实现了IEnumerable接口)目标元素,在调用HtmlHelper或者HtmlHelper以显示或者编辑模式对其进行呈现时候,会遍历其中每个元素,并根据基于集合元素

    5.8K110

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

    、提供程序模型;元数据驱动设计模式是使用频率比较高,因为其复杂度也相对较低所以比较容易上手;其实在很多现有的.NET框架中,如:WCF、ASP.NET、Remoting、Winform中都会看见Metadata...,描述角度是什么,描述层面又是是什么; 我们就拿ModelMetadata来讲,在ASP.NETMVC中,Model使用方向基本上被限定在三个操作集合中,第一:请求数据绑定,第二:数据绑定时验证...,第三:Model最终呈现;那么ModelMetadata要包含这三个操作集合所需要全部数据,当然也可以通过切割成三组元数据对象模型,通过继承体系包含起来;那么ModelMetadata需要描述三个方向上所需要数据集合...,Model本身就是一中数据,而通过使用ModelMetadata来抽象描述第二个层面上数据,从三个操作集合角度中包含使用数据,也就是说三个角度,两个层面;如果你框架需要具备多个层面,那就需要进一步细化抽象...标准数据经过一个中间环节转换成元数据,然后交给最终处理程序去使用;可以很清晰了解到元数据起到一个核心作用,它可以很好将处理程序与标准数据之间解耦,让中间元数据提供更大灵活性,通过这个中间层元数据

    67060

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

    如下面的代码片断所示,IMedataAware接口具有唯一方法成员OnMetadataCreated。...所以我们通过创建实现该接口特性不仅仅可以添加一些额外元数据属性,也可以修改已经通过相应标注特性初始化相关属性。[本文已经同步到《How ASP.NET MVC Works?》...,默认Index操作方法中具有一个类型为Foo参数,该参数直接作为Model呈现在默认View中。...但是Bar属性在默认情况下是不运行绑定数据具有任何HTML标记,所以会将输入数据视为恶意注入HTML,直接抛出异常。 ?...接下来我们来演示如何使用这个DisplayTextAttribute特性来替换DisplayAttribute特性进行显示名称设置,为此我们在通过Visual StudioASP.NET MVC 项目模板创建

    97460

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

    具有唯一键字典不同,作为模型绑定数据源多个数据可以共享同一个名称,并且它们基本以字符串形式存在,所以IValueProvider接口定义了一个TryGetValues方法根据指定名称得到一组以字符串数组表示值...,所以一个应用会涉及到针对多个IValueProvider对象使用。...不论模型绑定支持多少种数据源,如果我们总是能够使用一个单一IValueProvider对象来提供模型绑定数据,这无疑会使模型绑定设计变得更加简单。...一般来说,每个具体IModelBinder实现类型都具有一个对应IModelBinderProvider实现类型,所以ASP.NET Core应用采用注册多个IModelBinderProvider...由于每个叶子节点路径具有唯一性,如果将此路径来命名数据,那么数据与叶子节点就能对应起来。

    1.3K50

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

    那么ModelMetadataDataTypeName属性对目标元素最终呈现具有怎样影响呢?...通过UIHintAttribute特性设置模板名称和通过DataTypeAttribute特性设置数据类型唯一不同之处在于前者具有更高优先级。...根据Model元数据对目标模板解析是整个模板方法执行流程中最核心部分,也是本篇讨论重点。...我们以针对HtmlHelper扩展方法DisplayFor为例,看看针对通过表达式expression获取Model对象是如何以显示模式呈现出来。...ASP.NET MVCModel元数据与Model模板:预定义模板 ASP.NET MVCModel元数据与Model模板:模板获取与执行策略 ASP.NET MVCModel元数据与Model

    1.7K60

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

    阅读目录: 4.ModelMetadataModelMetadata元数据如何支撑Model与View之间组合关系) 4.1.ModelMetadata元数据结构(元数据与数据实体结构关系) 4.2...6.4.使用System.ComponentModel.DataAnnotations中获取元数据设置特性功能 4.ModelMetadataModelMetadata元数据如何支撑Model与View...,我们这里ModelMetadata是针对View显示相关元数据;ModelMetadata中绝大部分元数据是用来作为最终在View生成环节当中需要使用,比如:如何确定一个领域相关属性(Address...,前提是我们得很清楚它是如何控制HTMLDOM输出,到底是如何与HtmlHelper对象协调,又如何参与到元数据设置当中; 5.通过对ViewModel使用预定义Attribute设置ModelMetadata...,这些才这是我们这里所说组件,如果你组件并没有提供设计时、编译时、运行时这三个基本生命周期事件,那么只能说你组件是不完整; 设计时:当我们在使用传统ASP.NET开发程序时候最常用就是拖拽一个控件放入界面上

    1K50

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

    中] 传统ASP.NET具有一组重要控件类型叫做列表控件(ListControl),它子类包括DropDownList、ListBox、RadioButtonList和CheckBoxList等。...如下面的代码片断所示,IListProvider具有唯一方法GetListItems根据指定列表名称获取所有的列表项。...参数listName表示使用预定义列表名称,而value和values则表示绑定值。...ListAttribute实现了IMetadataAware接口,在实现OnMetadataCreated方法中将在构造函数中指定代表列表名称ListName属性添加到表示Model元数据ModelMetadata...:预定义模板 ASP.NET MVCModel元数据与Model模板:模板获取与执行策略 ASP.NET MVCModel元数据与Model模板:将ListControl引入ASP.NET MVC

    4.8K60
    领券