加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:00:27 所属栏目:asp.Net 来源:网络整理
导读:我有关于MVC 2与C#的以下问题. 这是我的型号: public class Pmjob{ [Tooltext="Hier soll der Name eingegeben werden"] [DisplayName("Type")] public int Name { get; set; }} 现在我想在我的视图中找到Tooltext项,e. G.: @Html.ToolTextFor(Model = Mod
我有关于MVC 2与C#的以下问题.

这是我的型号:

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

现在我想在我的视图中找到Tooltext项,e. G.:

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

或在BL:

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

这可能吗?

解决方法

创建一个抽象类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);
}

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

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

protected void Application_Start()
{
    // snipped

    ModelMetadataProviders.Current = new CustomModelMetadataProvider();
}

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

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

资源 :

> 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读