如何将尖括号转换为 ASP.NET Core 中的自定义 HTML?

How can I convert angle-brackets to custom HTML in ASP.NET Core?

我正在使用 EF 构建 MVC 的脚手架以从 SQL 服务器数据库检索数据。我在 table 中有一个列,其中 <tag> 对应 hyperscript/subscript;我该如何处理这些?

数据库中的列值就像

Hc<1> H2<d> T18<c>

但是在web应用中,我需要这样显示:

所以我需要将 < 替换为 <sup> 并将 > 替换为 </sup>

<td >
@Html.DisplayFor(modelItem => item.StrainName)
</td>

在索引页中显示该字段之前,我如何转义 <tags> 并显示 hyperscript/subscript 而不是

我试过了

 @Html.DisplayFor(modelItem => item.StrainName.Replace("<i>", "").Replace("</i>", "").Replace("<sup>", "<").Replace("</sup>", ">"))

但是它会抛出类似这样的错误 nvalidOperationException: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. Microsoft.AspNetCore.Mvc.ViewFeatures.ExpressionMetadataProvider.FromLambdaExpression<TModel, TResult>(Expression<Func<TModel, TResult>> expression, ViewDataDictionary<TModel> viewData, IModelMetadataProvider metadataProvider)

*** 编辑 ***

Table 没有使用任何样式

 <div class="col-md-12">
  <table class="table" >
       <thead>
        <tr>
         <th width="10%">
         .......
        </tr>
       </thead>
       <tbody>
         @foreach (var item in Model.Inventorys)
          {
            <tr style="padding-left:2em">
              <td>
               @Html.Raw(item.StrainName.Replace("<", "<sup>").Replace(">", "</sup>")) 
               </td>
               .............
              </tr>
            }
         </tbody>
        </table>

所以你的数据库包含这样的文本:

Hc<1> H2<d> T18<c>

并且您希望它呈现为 HTML,如下所示:

Hc<sup>1</sup> H2<sup>d</sup> T18<sup>c</sup>

显示如下:

Hc1 H2d T18c


然后在你的 Razor (.cshtml) 文件中做一个快速而简单的解决方案:

@Html.Raw( item.StrainName.Replace( "<", "[sup]" ).Replace( ">", "</sup>" ).Replace( "[sup]", "<sup>" ) ) )
  • .Replace方法一次只替换一个子字符串,所以我最初想用"<sup>"替换<"</sup>"替换>需要对 .Replace 进行 2 次调用...
    • 像这样:
      item.StrainName.Replace( "<", "<sup>" ).Replace( ">", "</sup>" )
      
  • ...但是这不起作用,因为第二次调用 .Replace 将匹配第一次调用 .Replace 添加的 > 字符(来自尾随 ><sup>)
  • 因此需要 3 个单独的 .Replace 调用:
    • 第一次调用使用不同的字符集([])以防止添加新的 > 个字符,而第二次调用会匹配这些字符。
    • 第二个正常工作。
    • 第三次调用然后用第一次调用的 <> 替换 []

您不需要使用 DisplayFor 或任何其他 ___For 方法。 For 方法用于渲染 HTML ,(一般来说)对应于表单模型的“双向”成员(又名“数据绑定”)。在这种情况下,这只是对静态 HTML.

的简单单向渲染

更好的方法是根据正则表达式验证文本,以确保尖括号是平衡的,因此不会用不平衡的 <sup> 标签破坏您的 HTML(例如,防止像 Hc>1>> H2d< 这样呈现的无效文本 - 这是 reader.

的练习