gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:54:29 25 4
gpt4 key购买 nike

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

这是我的模型:

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

现在我想到达我 View 中的 Tooltext 项,e。例如:

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

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

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

来源:

关于c# - 自定义数据注释 ASP.NET MVC C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5548156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com