自定义数据注释ASP.NET MVC C#

我有关于使用C#的MVC 2的以下问题。

这是我的模型:

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

现在我想在我的视图中到达Tooltext项,例如:

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

或在BL:

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

这可能吗?

创建一个抽象类MetaDataAttribute:

 public abstract class MetadataAttribute : Attribute { ///  /// Method for processing custom attribute data. ///  /// A ModelMetaData instance. public abstract void Process(ModelMetadata modelMetaData); } 

使您的属性inheritance自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); } } 

创建自定义MetaDataProvider:

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

并替换默认值(global.asax.cs):

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

最后,您可以在视图中(或在Html Helper中)访问它:

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

资源 :