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);
    }
  • 相关阅读:
    scipy.spatial.distance.cdist
    关于hstack和Svstack
    numpy.hstack(tup)
    numpy.random.uniform(记住文档网址)
    Python集合(set)类型的操作
    python+Eclipse+pydev环境搭建
    python数据挖掘领域工具包
    LVS 命令使用
    CMD mysql 备份脚本
    Windos Server Tomcat 双开配置
  • 原文地址:https://www.cnblogs.com/pingjiang/p/1870676.html
Copyright © 2011-2022 走看看