Custom Data Annotations ASP.NET MVC C#

后端 未结 1 399
猫巷女王i
猫巷女王i 2020-12-24 04:09

I have the follwing question about MVC 2 with C#.

Here is my Model:

public class Pmjob
{
   [Tooltext=\"Hier soll der Name eingegeben werden\"]
   [D         


        
相关标签:
1条回答
  • 2020-12-24 04:36

    Create an abstract class MetaDataAttribute :

    public abstract class MetadataAttribute : Attribute
    {
        /// <summary>
        /// Method for processing custom attribute data.
        /// </summary>
        /// <param name="modelMetaData">A ModelMetaData instance.</param>
        public abstract void Process(ModelMetadata modelMetaData);
    }
    

    Make your attribute inherit from MetaDataAttribute :

    public class ToolTextAttribute : MetadataAttribute
    {
        public string Text { get; set; }
        public TooltextAttribute(string text)
        {
            this.Text = new text;
        }
    
        public override void Process(ModelMetadata modelMetaData)
        {
            modelMetaData.AdditionalValues.Add("ToolText", this.Text);
        }
    }
    

    Create the custom MetaDataProvider :

    public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
    {
        protected override ModelMetadata CreateMetadata(
            IEnumerable<Attribute> attributes,
            Type containerType,
            Func<object> modelAccessor,
            Type modelType,
            string propertyName)
        {
            var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
            attributes.OfType<MetadataAttribute>().ToList().ForEach(x => x.Process(modelMetadata));
            return modelMetadata;
        }
    }
    

    And replace the default one (global.asax.cs) :

    protected void Application_Start()
    {
        // snipped
    
        ModelMetadataProviders.Current = new CustomModelMetadataProvider();
    }
    

    Finally, you can access it in your view (or in a Html Helper ) :

    (string)ViewData.ModelMetadata.AdditionalValues.Where(x => x.Key == "ToolText").SingleOrDefault()
    

    Source :

    • http://weblogs.asp.net/seanmcalinden/archive/2010/06/11/custom-asp-net-mvc-2-modelmetadataprovider-for-using-custom-view-model-attributes.aspx
    • http://weblogs.asp.net/seanmcalinden/archive/2010/06/12/asp-net-mvc-2-auto-complete-textbox-custom-view-model-attribute-amp-editortemplate.aspx
    0 讨论(0)
提交回复
热议问题