我正在尝试创建一个表标签助手,该助手可以自动解析给定模型中的列和行。
这是应该的(理论上是使用):
<table for="@Model">
</table>
,这应该自动显示列名和行。
自从我传递模型以来,生成列名并不困难
[HtmlTargetElement("table", Attributes = "for")]
public class DataTableTagHelper :TagHelper
{
[HtmlAttributeName("for")]
public ModelExpression For { get; set; }
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
foreach (var item in For.Metadata.ElementMetadata.Properties)
{
// generate html for theader using item.Name
}
}
}
但是获取模型的值并不容易。
是否可以获取这些属性的值?
我试图避免反射,因为我不认为通过每个请求进行反射都可以生成HTML代码。
答案 0 :(得分:3)
我们通过将模型传递给属性的PropertyGetter
来获得属性的值。
public override void Process(TagHelperContext context, TagHelperOutput output)
{
foreach (var prop in For.Metadata.Properties)
{
var propertyName = prop.Name;
var propertyValue = prop.PropertyGetter(For.Model);
}
return Task.CompletedTask;
}
如果模型实现了IEnumerable
,那么我们需要将每个项目传递给其PropertyGetter
。
public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
foreach (var item in For.Model as IEnumerable)
{
foreach (var prop in For.Metadata.ElementMetadata.Properties)
{
var name = prop.Name;
var value = prop.PropertyGetter(item);
}
}
return Task.CompletedTask;
}