zoukankan      html  css  js  c++  java
  • asp.net mvc自定义MetadataProvider

    自定义元数据提供程序

    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);
    }
  • 相关阅读:
    Linux性能优化之CPU优化(一)
    MongoDB CPU使用较高,如何排查?
    MongoDB 安全配置
    open-falcon v0.2 监控部署记录
    有关redis相关的性能优化及内存说明
    kafka 基础知识梳理
    Java 进程占用 VIRT 虚拟内存超高的问题研究
    【nodejs】文件上传demo实现
    translate和position的比较
    setAttribute()、getAttribute()与ele[attr]与自定义属性
  • 原文地址:https://www.cnblogs.com/pingjiang/p/1870676.html
Copyright © 2011-2022 走看看