asp.net mvc自定义MetadataProvider
2010-11-06 17:34
369 查看
自定义元数据提供程序
自定义验证提供程序
最后在全局文件中配置
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace ValidationSample { public class ConventionMetadataProvider : AssociatedMetadataProvider { public ConventionMetadataProvider() : base() { } protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName) { var metadata = new ModelMetadata(this, containerType, modelAccessor, modelType, propertyName); if (propertyName == null) return metadata; if (propertyName.EndsWith("Id")) { metadata.TemplateHint = "HiddenInput"; metadata.HideSurroundingChrome = true; } if (propertyName.EndsWith("X")) { metadata.IsRequired = true; } metadata.DisplayName = propertyName.TrimEnd('X').Wordify(); return metadata; } } public static class Extensions { public static string Wordify(this string str) { string newString = ""; foreach(char c in str) { newString += char.IsUpper(c) ? " " + c : c.ToString(); } return newString; } } }
自定义验证提供程序
using System; using System.Collections.Generic; using System.Web.Mvc; namespace ValidationSample { public class ConventionValidatorProvider : AssociatedValidatorProvider { protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes) { if (metadata.IsRequired) { yield return new MyRequiredValidator(metadata, context); } } #region Nested type: MyRequiredValidator public class MyRequiredValidator : ModelValidator { internal MyRequiredValidator(ModelMetadata metadata, ControllerContext context) : base(metadata, context) { } public override IEnumerable<ModelValidationResult> Validate(object container) { var result = new List<ModelValidationResult>(); if (Metadata.Model == null) result.Add(new ModelValidationResult { MemberName = Metadata.PropertyName, Message = string.Format("{0} is required", Metadata.DisplayName) }); return result; } public override IEnumerable<ModelClientValidationRule> GetClientValidationRules() { yield return new ModelClientValidationRequiredRule("This field is required"); } } #endregion } }
最后在全局文件中配置
protected void Application_Start() { ModelMetadataProviders.Current = new ConventionMetadataProvider(); ModelValidatorProviders.Current = new ConventionValidatorProvider(); RegisterRoutes(RouteTable.Routes); }
相关文章推荐
- 自定义VirtualPathProvider映射ASP.NET MVC View
- Asp.net MVC Preview 4 中自定义Jquery的HtmlHelper扩展
- ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
- Asp.net MVC 自定义异常处理类
- [转载]自定义ASP.NET MVC Html辅助方法 TagBuilder
- Asp.Net MVC 视图(创建自定义HTML Helpers) - Part.2
- ASP.NET MVC 在View(cshtml)中使用自定义帮助类
- asp.net mvc输出自定义404等错误页面,非302跳转
- asp.net mvc源码分析-DefaultModelBinder 自定义的普通数据类型的绑定和验证
- 在Asp.Net MVC中使用NVelocity模板引擎(一)-自定义关键字
- ASP.NET MVC 3.0(十二): MVC 3.0 使用自定义的Html控件
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC 自定义路由
- Asp.Net Mvc 自定义扩展
- ASP.NET MVC下自定义错误页和展示错误页的方式
- ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider
- 【小技巧】自定义asp.net mvc的WebFormViewEngine修改默认的目录结构
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
- ASP.NET mvc 自定义验证和Filter过滤器传参
- ASP.NET MVC:自定义Route让URL更优雅