Asp.net core 使用反射的NetCore帮助器

Asp.net core 使用反射的NetCore帮助器,asp.net-core,reflection,tag-helpers,asp.net-core-tag-helpers,Asp.net Core,Reflection,Tag Helpers,Asp.net Core Tag Helpers,我有一个有很多属性的模型。创建或更新他们的视图是一项麻烦的工作 因此,我尝试在运行时使用反射创建视图: (PS:是的,我知道前端非常重要,我应该在设计时使用Vue或其他框架来创建视图。但我只想在运行时尝试构建表单,是的,我是个怪胎。哈哈) 这是我的代码: @{ var dic=Model.GetAttributePropsByCategory();//按CategoryAttribute和自定义DisplayIndexAttribute获取PropertyInfo } @foreach(dic中

我有一个有很多属性的模型。创建或更新他们的视图是一项麻烦的工作

因此,我尝试在运行时使用反射创建视图: (PS:是的,我知道前端非常重要,我应该在设计时使用Vue或其他框架来创建视图。但我只想在运行时尝试构建表单,是的,我是个怪胎。哈哈)

这是我的代码:

@{
var dic=Model.GetAttributePropsByCategory();//按CategoryAttribute和自定义DisplayIndexAttribute获取PropertyInfo
}
@foreach(dic中的var项目)
{
var category=items.Key;//InfoCategoryAttribute
foreach(items.Value中的变量元组)
{
var displayIndex=tuple.Item1;//自定义:DisplayIndexAttribute
var prop=tuple.Item2;//PropertyInfo
}
}
我的目标是:


但结果是这样的:


因此,我阅读了源代码中的。我发现钥匙是InputAgHelper。用于:

公共类inputAgHelper:TagHelper
{
...
[HtmlAttributeName(用于属性名称)]
{get;set;}的公共模型表达式
...
}
但我无法理解InputAgHelper.For是如何创建的。因此,我不知道如何克服它来实现我的目标

有什么建议吗?Thx.

在的源代码中,我们可以发现以下代码片段将帮助生成文本框输入,并且.Name的第三个参数
将用于设置文本框
id
Name
属性的值

return Generator.GenerateTextBox(
    ViewContext,
    modelExplorer,
    For.Name,
    modelExplorer.Model,
    format,
    htmlAttributes);
如果我们调试源代码,我们会发现
For
的值如下所示

return Generator.GenerateTextBox(
    ViewContext,
    modelExplorer,
    //For.Name,
    For.Model.ToString(),
    modelExplorer.Model,
    format,
    htmlAttributes);

为了获得预期的结果,您可以对其进行自定义,并将.Model.ToString()的
传递给
GenerateTextBox
方法,而不是.Name的
,如下所示

return Generator.GenerateTextBox(
    ViewContext,
    modelExplorer,
    //For.Name,
    For.Model.ToString(),
    modelExplorer.Model,
    format,
    htmlAttributes);
测试结果


以上代码仅用于快速复制问题和生成文本框输入,如果您想在生成其他类型的html输入标记(如复选框、隐藏等)时实现类似问题,您可能需要检查InputAgHelper、源代码的详细信息。