我有以下模型:
class User
{
[Display(Name = "Display Name")]
public string Name { get; set; }
}
在标准的Razor中,我会做类似的事情以获取“显示名称”
<label asp-for="Model.Name"></label>
但这在Blazor中似乎不起作用。有人知道如何在Blazor页面中获得显示名称而无需使用反射吗?
最佳答案
坏消息:
目前(preview7),它们不是开箱即用的功能。
好消息:
创建您自己的自定义标签组件(当然需要一点点反射)并在其中封装功能非常容易:
@using System.Linq
@using System.Reflection
@using System.ComponentModel.DataAnnotations
@typeparam TItem
<label for="@fortag">@label</label>
@code {
[Parameter] public string aspfor { get; set; }
private string label => GetDisplayName(aspfor);
private string fortag => aspfor;
private string GetDisplayName(string propertyname)
{
MemberInfo myprop = typeof(TItem).GetProperty(propertyname) as MemberInfo;
var dd = myprop.GetCustomAttribute(typeof(DisplayAttribute)) as DisplayAttribute;
return dd?.Name ?? "";
}
}
并在您的.razor页面中使用它:
<CustomLabel TItem="User" aspfor="@nameof(User.Name)"></CustomLabel>
可以使用
Expressions
或更多类型化的代码(如@issac在其答案中所述)随意进行改进,然后请我们来解释您的经验。演示:
在blazorfiddle上尝试一下。
关于c# - 如何在Blazor Razor 页面的标签上获取 "Display name"?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57202354/