私のモデルが持っている場合
[DisplayName("First Name")]
public string firstName { get; set; }
その後、LabelForを使用してビューで印刷できます。
@Html.LabelFor(model => model.acc_first)
その後、次のようにレンダリングされます
<label for="firstName">First Name</label>
@Html.DisplayNameFor(x => x.acc_first)
属性にアクセスするには、カスタムHtml
ヘルパーが必要です。属性は実際にはプロパティやモデルの一部ではないので、それらにアクセスする方法を一巡する必要があります。
public static IHtmlString DisplayName<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression) {
var metadata = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
return new HtmlString(metadata.DisplayName);
}
DataAnnotationsの一部ではない追加の属性については、次のことができます。
カスタム属性を作成する
public class TooltipAttribute : Attribute, IMetadataAware {
public TooltipAttribute(string tooltip) {
this.Tooltip = tooltip;
}
public string Tooltip { get; set; }
public void OnMetadataCreated(ModelMetadata metadata) {
metadata.AdditionalValues["Tooltip"] = this.Tooltip;
}
}
魔法はOnMetadataCreated実装で発生します。ここで、特定の属性に必要なものをAdditionalValuesに追加できます。この場合、ツールチップキーを追加しています。他の属性またはプロバイダが同じ名前の独自のキーを追加する可能性があるため、名前は一意である必要があります。属性は常に同じ順序で読み取られるわけではないことに注意してください。したがって、ツールチップ属性は、最初、最後、または中間のどこかで呼び出されます。これは、望ましくない効果を引き起こす可能性があるため、重要な違いです。
次に、カスタム属性ヘルパーを作成します
public static IHtmlString TooltipFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression) {
var metadata = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
if (metadata.AdditionalValues.ContainsKey("Tooltip"))
return new HtmlString((string)metadata.AdditionalValues["Tooltip"]);
return new HtmlString("");
}
4つの手順で属性Display(Name="...")
の値にアクセスできます。
var type = typeof(YourNamespace.Models.YourModelName);
var memInfo = type.GetMember("firstName"); // your member
var attributes = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), false);
var displayname = ((System.ComponentModel.DataAnnotations.DisplayAttribute)attributes[0]).Name;
すると、displayname
の値はFirst Name
になります。
ダレンオスターの答えに基づいて:
@Html.DisplayNameFor(x => x.acc_first)
このドキュメントへのリンクは次のとおりです。 https://msdn.Microsoft.com/en-us/library/system.web.mvc.html.displaynameextensions.displaynamefor(v = vs.118).aspx
次のようにビューコードでこれを使用できます。
@{
var foo = Html.DisplayNameFor(x => x.acc_first);
// call function
DoStuff(foo);
}
単に使用する必要があります
[Display(Name = "First Name")]
public string name{ get; set; }
<label asp-for="firstName">First Name</label>
asp-forに変更する必要があります