asp.net-mvc – 组合数据注释属性
发布时间:2020-05-24 10:16:51 所属栏目:asp.Net 来源:互联网
导读:我有一些属性的集合,这些属性应该总是一起用于UI和验证.例如,对于货币字段,我必须添加UI提示,验证逻辑和显示格式.结果,我的班级看起来非常拥挤. public class Model{ [UIHint(Currency)] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = {0
|
我有一些属性的集合,这些属性应该总是一起用于UI和验证.例如,对于货币字段,我必须添加UI提示,验证逻辑和显示格式.结果,我的班级看起来非常拥挤. public class Model
{
[UIHint("Currency")]
[DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:C}")]
[CustomRegularExpression(Currency.ValidationPattern,OnlyOnClientSide = true)]
[SetMetaDataForCustomModelBinder("Currency")]
public double? Cost { get; set; }
[UIHint("Currency")]
[DisplayFormat(ApplyFormatInEditMode = true,OnlyOnClientSide = true)]
[SetMetaDataForCustomModelBinder("Currency")]
public double? Profit { get; set; }
}
有没有办法创建一个[Currency]属性,将所有这些属性的功能组合成一个简单的属性?我的目标是创建以下内容: public class Model
{
[Currency] public double? Cost { get; set; }
[Currency] public double? Profit { get; set; }
}
编辑:为了澄清,我已经尝试创建自定义属性,但没有暴露的接口允许我实现这些不同属性的功能.我可以继承ValidationAttribute,但是我也不能将UIHintAttribute子类化.我还缺少任何其他潜在的解决方案? 解决方法根据 post以及帖子中对Phil Haack的 article的引用,您可以创建自定义的AssociatedMetadataProvider,它可以添加您需要的属性.你会得到这样的东西:public class MyCustomMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes,Type containerType,Func<object> modelAccessor,Type modelType,string propertyName)
{
var attributeList = attributes.ToList();
if (attributeList.OfType<CurrencyAttribute>().Any())
{
attributeList.Add(new UIHintAttribute("Currency"));
attributeList.Add(new DisplayFormatAttribute
{
ApplyFormatInEditMode = true,DataFormatString = "{0:C}"
});
}
return base.CreateMetadata(attributeList,containerType,modelAccessor,modelType,propertyName);
}
}
并在应用程序启动事件中: ModelMetadataProviders.Current = new MyCustomMetadataProvider(); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.net Web服务与WCF
- asp.net-mvc – 用于局部视图的ASP.NET MVC 3控制器操作
- ASP.NET HttpApplication.EndRequest事件未被触发
- asp.net – 在IIS中将WebAPI添加为子/嵌套应用程序
- 如何运行ASP.Net页面的客户端验证?
- asp.net-mvc – 从OWIN身份验证中间件中考虑控制器属性
- 在iis6.0中更改asp.net版本
- asp.net – System.Net.Mail新MailMessage随机发送重复的电
- ASP.NET – 上传大文件时如何显示错误页面(超过最大请求长度
- ASP.Net 4中ClientIDMode的正确设置是什么,以获得ASP.Net 2
推荐文章
站长推荐
- asp.net – 避免表格重新提交
- asp.net – 如何添加.aspx页面到现有的MVC 4项目
- .net – 如何获取客户端DotNetOpenAuth.OAuth2返
- ASP.NET和C#有什么区别?
- Phonegap上的ASP.NET窗体身份验证问题(Android)
- ASP.Net:将客户端onClick添加到GridView中的Hyp
- asp.net – 从类型’DBNull’到类型’String’的
- asp.net-mvc – 无法加载汇编WebPages.Deploymen
- ASP.NET MVC 2 – 如何使用IgnoreRoute忽略整个目
- asp.net – 如何在使用edmx文件时在连接字符串中
热点阅读
