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);
    }
  • 相关阅读:
    Struts2标签库
    ognl表达式
    Struts2拦截器
    Struts2文件上传与下载
    Swoft2.x 小白学习笔记 (四) --- RPC
    Swoft2.x 小白学习笔记 (三) --- Task、协程
    Swoft2.x 小白学习笔记 (二) --- mysql、redis
    Swoft2.x 小白学习笔记 (一) ---控制器
    Tornado WebSocket简单聊天
    用python实现的21点游戏
  • 原文地址:https://www.cnblogs.com/pingjiang/p/1870676.html
Copyright © 2011-2022 走看看