Asp.net core 使用反射的NetCore帮助器
我有一个有很多属性的模型。创建或更新他们的视图是一项麻烦的工作 因此,我尝试在运行时使用反射创建视图: (PS:是的,我知道前端非常重要,我应该在设计时使用Vue或其他框架来创建视图。但我只想在运行时尝试构建表单,是的,我是个怪胎。哈哈) 这是我的代码: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中
@{
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、源代码的详细信息。