如何将尖括号转换为 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.
的练习
我正在使用 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.