gpt4 book ai didi

asp.net-mvc - 如何在运行时从 Display(Name=) DataAnnotation 获取强类型列表脚手架 View 的列标题?

转载 作者:行者123 更新时间:2023-12-03 13:47:21 24 4
gpt4 key购买 nike

我如何获得 [Display(Name="Some Title")]在 List 脚手架 View 的输出中呈现的 DataAnnotations “Some Title”?

我为这个类创建了一个强类型列表脚手架 View :

public class CompanyHoliday
{
[Key]
public int Id { get; set; }

[Required]
[Display(Name = "Datum")]
[DataType(System.ComponentModel.DataAnnotations.DataType.Date)]
public DateTime Date { get; set; }

[Required]
[StringLength(50)]
[Display(Name = "Feiertag Name")]
public string Name { get; set; }
}

View 如下所示:
@model IEnumerable<Zeiterfassung.Domain.CompanyHoliday>

@{
ViewBag.Title = "Year";
}

<h2>Year</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th></th>
<th>
Date
</th>
<th>
Name
</th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
<td>
@String.Format("{0:g}", item.Date)
</td>
<td>
@item.Name
</td>
</tr>
}

</table>

但是,我不想在表头中出现“日期”和“名称”。我希望在那里动态呈现“基准”和“Feiertag Name”。

实际的列标题标题应该来自 Display DataAnnotation。

我该怎么做呢?

最佳答案

有点老话题,但我想出了一个扩展方法来处理这个问题。

可以说我的模型是:

public class MyModel
{
[Display(Name = "Some Property")]
public string SomeProp { get; set; }
}

将此方法放入静态类中:
namespace Web.Extensions
{
public static class HtmlHelperExtensions
{
public static MvcHtmlString DisplayNameFor<TModel, TProperty>(this HtmlHelper<IEnumerable<TModel>> helper, Expression<Func<TModel, TProperty>> expression)
{
var name = ExpressionHelper.GetExpressionText(expression);
name = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(() => Activator.CreateInstance<TModel>(), typeof(TModel), name);
return new MvcHtmlString(metadata.DisplayName);
}
}
}

然后在您的 View 中,它采用 IEnumerable<MyModel> ,你可以像这样使用它:
@using Web.Extensions
@model IEnumerable<MyModel>

<table>
<tr>
<th>
@Html.DisplayNameFor(m => m.AvgElecCost)
</th>

生成的 HTML 将是:
        <th>
Some Property
</th>

希望能帮助到你!

关于asp.net-mvc - 如何在运行时从 Display(Name=) DataAnnotation 获取强类型列表脚手架 View 的列标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4947854/

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