在ASP.NET MVC中使用自定义验证替换默认客户端验证
发布时间:2020-12-16 06:38:43 所属栏目:asp.Net 来源:网络整理
导读:我有一个包含DateTime属性的视图模型,我想使用自定义格式(仅限月份和年份,“MM.YYYY”)为其提供文本框: public class MyModel { public DateTime? DateField {get; set;}} 格式化TextBox的值很简单(使用格式字符串).我还实现了一个自定义模型绑定器来进行转
我有一个包含DateTime属性的视图模型,我想使用自定义格式(仅限月份和年份,“MM.YYYY”)为其提供文本框:
public class MyModel { public DateTime? DateField {get; set;} } 格式化TextBox的值很简单(使用格式字符串).我还实现了一个自定义模型绑定器来进行转换,这很好. 我仍然遇到客户端验证问题:我可以实现从ValidationAttribute派生的自定义验证器,它实现IClientValidatable并设置相应的jquery.validate适配器等. 但是MVC仍然将“默认”验证属性data-val-date(除了我的自定义验证属性data-val-monthyeardate)添加到输入字段,因此默认检查仍然适用,输入“MM.YYYY”被拒绝. 有没有办法抑制数据类型的默认客户端验证并将其替换为自定义(而不是“添加”自定义的)? 解决方法
由于框架不允许您使用某些自定义属性覆盖实际类型,甚至覆盖特定类型的ModelMetadataProvider,因此您必须注册自己的全局ModelMetadataProvider,欺骗验证器认为它实际上是一个字符串.
就像是: public class MyModelMetadataProvider : DataAnnotationsModelMetadataProvider { protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes,Type containerType,Func<object> modelAccessor,Type modelType,string propertyName) { if (attributes.OfType<ExcludeCharAttribute>().Any()) modelType = typeof (String); return base.CreateMetadata(attributes,containerType,modelAccessor,modelType,propertyName); ; } } 注册使用: ModelMetadataProviders.Current = new MyModelMetadataProvider(); 尽管如此,由于核心问题是客户端问题,我将纯粹使用客户端代码处理它.在您的monthyeardate适配器中,您可以强制删除日期验证(如果您将共享月份代码,我可以提供一个示例). 见MSDN (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在ASP.NET中的多个Web应用程序中维护相同的会话ID
- asp.net-web-api – 在WebApi2帮助页面中启用文档
- asp.net-mvc – ASP.NET MVC架构如何适应传统的多层架构
- asp.net-mvc – 使用MVC Framework RC1更新断开连接的LINQ对
- asp.net – 用于Basic或Windows身份验证的无限重定向循环?
- 从ASP.NET中的标准程序集覆盖资源
- 如何为枚举执行asp.net mvc 4模型绑定?
- asp.net – Web API – Web窗体项目安全性错误
- asp.net-mvc – 模型和视图模型之间的区别
- .net-core – 存储Azure Vault客户端ID和客户端密钥
推荐文章
站长推荐
热点阅读