簡體   English   中英

如何從 C# 中的剃須刀引擎模板獲取密鑰列表?

[英]How to get key list from razor engine template in c#?

我正在使用 .net 核心。
項目包含許多動態剃須刀引擎模板。 所有模板均由第三方用戶生成。 因此系統不能使用任何通用模型,也不能生成帶有值的填充剃須刀引擎模板的個體模型。
我需要獲取剃須刀引擎模板中使用的所有鍵的列表。

<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

我花了幾天時間在互聯網上找到解決方案,但沒有得到任何合適的解決方案。 那么如何從 razor 引擎模板中獲取密鑰列表呢?

你可以使用正則表達式。 根據您發布的示例,以下工作:

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.([a-zA-Z_.]*)";
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM