2011-04-05 10 views
9

C# ile MVC 2 hakkında soru soruyorum.Özel Veri Açıklamaları ASP.NET MVC C#

public class Pmjob 
{ 
    [Tooltext="Hier soll der Name eingegeben werden"] 
    [DisplayName("Type")] 
    public int Name { get; set; } 
} 

Şimdi, bana göre e Tooltext öğeyi ulaşmak istiyorum:

İşte benim Modelidir. g .:

@Html.ToolTextFor(Model => Model.Pmjob.Name) 

veya BL:

if (Model.Pmjob.Name.Tooltext == "") { 
} 

bu mümkün mü?

cevap

25

soyut sınıf MetaDataAttribute oluşturun:

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); 
    } 
} 

özel MetaDataProvider oluşturun:

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); 
} 

MetaDataAttribute devralan sizin niteliğini olun

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; 
    } 
} 

Ve Varsayılan bir yerine (küresel .asax.cs):

protected void Application_Start() 
{ 
    // snipped 

    ModelMetadataProviders.Current = new CustomModelMetadataProvider(); 
} 

Son olarak, görünümünde erişmek (veya Html Yardımcısı olarak) yapabilirsiniz:

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

Kaynak:

+0

şeref için blog yazarı, kodumu geri bulamadığım için :) – mathieu