gpt4 book ai didi

razor - IEnumerable 模型的表 TagHelper(不使用反射)

转载 作者:行者123 更新时间:2023-12-01 09:59:40 24 4
gpt4 key购买 nike

我正在尝试创建一个表标记助手,它可以自动解析给定模型中的列和行。

这是它应该如何(理论上使用):

<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 代码虽然对每个请求进行反射是一个好主意。

最佳答案

我们通过将模型传递给其属性的 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;
}

关于razor - IEnumerable 模型的表 TagHelper(不使用反射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52012736/

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