asp.net-mvc-3 – 在运行时更改viewmodel的MetadataType属性
发布时间:2020-12-16 03:55:10 所属栏目:asp.Net 来源:网络整理
导读:在Microsoft MVC 3.0中,我有一个类: public class Product{ public string Title {get;set;}} 此类可以表示为产品或服务,它们之间的唯一区别仅在于查看时的字段标签. 所以我创建了两个类: public class ProductMetaData { [Display(Name = "Product")] pub
在Microsoft MVC 3.0中,我有一个类:
public class Product{ public string Title {get;set;} } 此类可以表示为产品或服务,它们之间的唯一区别仅在于查看时的字段标签. 所以我创建了两个类: public class ProductMetaData { [Display(Name = "Product")] public object Title { get; set; } } 和 public class ServiceMetaData { [Display(Name = "Service")] public object Title { get; set; } } 如何在运行时将这些类设置为MetadataType? ————————编辑————————- – 我发现我们可以通过继承DataAnnotationsModelMetadataProvider和DataAnnotationsModelValidatorProvider类并在这两者中重写GetTypeDescriptor方法来设置/更改类型的元数据,如下所示: public class xx : DataAnnotationsModelMetadataProvider { protected override ICustomTypeDescriptor GetTypeDescriptor(Type type) { if (type == typeof(InvoiceItemViewModel)) return (new AssociatedMetadataTypeTypeDescriptionProvider(typeof(InvoiceItemViewModel),typeof(InvoiceItemMetaData))).GetTypeDescriptor(type); else return base.GetTypeDescriptor(type); } } public class yy : DataAnnotationsModelValidatorProvider { protected override ICustomTypeDescriptor GetTypeDescriptor(Type type) { if (type == typeof(InvoiceItemViewModel)) return (new AssociatedMetadataTypeTypeDescriptionProvider(typeof(InvoiceItemViewModel),typeof(InvoiceItemMetaData))).GetTypeDescriptor(type); else return base.GetTypeDescriptor(type); } } 以及Global.ascx中的以下更改 ModelMetadataProviders.Current = new xx(); ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(new yy()); 但问题是如何将它依赖于模型实例而不仅仅是键入?!……正如我所看到的,通过这些类没有任何模型访问权限. MVC pipleline中是否有任何地方可以根据模型数据更改这两个提供者classess? (例如:OnActionExecuting或其他什么?) 解决方法
您可以编写一个
custom model metadata provider.例如,您可以查看
MvcExtensions.它们实现了
such provider,以便能够在运行时动态地将元数据关联到给定类型.
FluentValidation.NET使用相同的技术.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- nuget – 在部署的asp.net mvc解决方案中需要packages.conf
- js_jquery_创建cookie有效期问题_时区问题
- asp.net-mvc-3 – 将Mocked HttpPostedFileBase作为MVC 3控
- 动态填充DropDownList不会在回发ASP.net上保留值c#
- asp.net-mvc-4 – Css和Js捆绑,IController Exception
- ASP.NET MVC 2中是否存在强类型的RedirectToAction?
- asp.net-mvc – 在活动的SignalR连接期间更改用户身份 – 如
- asp-classic – 经典ASP:捕获错误
- asp.net – 我需要html编码标题属性(工具提示)吗?
- asp.net-mvc – 在位于子域上的图像之间切换http和https