如何在c#中从razor引擎模板中获得键列表?



我正在使用。net core。
项目包含许多动态剃刀引擎模板。生成所有模板第三方用户。因此系统不能使用任何通用模型或无法生成单个模型填充剃刀引擎模板与值。
我需要得到在剃刀引擎模板中使用的所有键的列表。

<acord>
<student>
<firstName>@Model.StudentFirstName</firstName>
<lastName>@Model.StudentLastName</lastName>
@if(@Model.StudentPhone != null)
{
<phone>@Model.StudentPhone</phone>
}
</student>
<parents>
<firstName>@Model.parentFirstName</firstName>
<lastName>@Model.parentLastName</lastName>
</parents>
</acord>

根据上面的例子,我需要键列表,如
@Model。StudentFirstName, @ model。StudentLastName, @ model。StudentPhone, @Model.parentFirstName@Model.parentLastName

我花了几天时间在网上寻找解决方案,但没有得到任何合适的解决方案。那么我如何从剃刀引擎模板获得键列表?

您可以使用正则表达式。根据您发布的示例,以下工作:

var input = @"<acord>
<student>
<firstName>@Model.StudentFirstName</firstName>
<lastName>@Model.StudentLastName</lastName>
@if(@Model.StudentPhone != null)
{
<phone>@Model.StudentPhone</phone>
}
</student>
<parents>
<firstName>@Model.parentFirstName</firstName>
<lastName>@Model.parentLastName</lastName>
</parents>
</acord>";
var pattern = @"@Model.([w.[]]*)";
var keys = Regex.Matches(input, pattern)
.Cast<Match>()
.Select(m => m.Groups.Cast<Group>().LastOrDefault())
.Select(g => g.Value)
.Distinct()        
.ToList();
foreach(var k in keys)
{
Console.WriteLine(k);
}

输出:

StudentFirstName
StudentLastName
StudentPhone
parentFirstName
parentLastName

最新更新