在 Blazor 中以富文本显示文本
Display text in Blazor with rich text
我将 Blazor 与富文本编辑器结合使用。当我输出这样的文本时:
它在文本周围添加引号并显示实际标记 ID:
我的标记显示有引号,实际标记(粗体和彩色)未显示。有谁知道为什么或如何使用 Blazor 进行这项工作?
这个问题是 Blazor 编译和呈现页面的方式的基础。这些组件在编译期间生成为 类,然后使用 RenderTreeBuilder 再次生成 HTML。这反过来将您的输入作为字符串文字并输出它们,因为 blazor 在您的标记中看到的是 "insert string x into position y",而不是实际的 HTML 标记。
编辑
我回答后不久就找到了一个简单的方法来做到这一点,所以我把它放在这里,使用类型 MarkupString
。设置是这样完成的:
MarkupRenderer.razor
@((MarkupString)Markup)
@code {
[Parameter]
public string Markup { get; set; }
}
然后在你的 parent 中你可以这样使用它:
Parent.razor*
.....
<MarkupRenderer Markup="@markupString" />
这将呈现出您正在寻找的标签和属性,以便将内容输出为 HTML。
关于此的官方文档非常简短,包括警告:
"Rendering raw HTML constructed from any untrusted source is a security risk and should be avoided!",就是这样,如果您还没有记住这一点,请记住这一点。
我最终使用了 Markdig
<PackageReference Include="Markdig" Version="0.20.0" />
然后在我的 POCO 模型中包含一个未映射的字段:
[NotMapped]
public MarkupString HtmlQuestion { get; set; }
然后在我的服务层中添加了标记文本:
using Markdig;
...
q.HtmlQuestion = (MarkupString)Markdown.ToHtml(q.QuestionDescription);
我将 Blazor 与富文本编辑器结合使用。当我输出这样的文本时:
它在文本周围添加引号并显示实际标记 ID:
我的标记显示有引号,实际标记(粗体和彩色)未显示。有谁知道为什么或如何使用 Blazor 进行这项工作?
这个问题是 Blazor 编译和呈现页面的方式的基础。这些组件在编译期间生成为 类,然后使用 RenderTreeBuilder 再次生成 HTML。这反过来将您的输入作为字符串文字并输出它们,因为 blazor 在您的标记中看到的是 "insert string x into position y",而不是实际的 HTML 标记。
编辑
我回答后不久就找到了一个简单的方法来做到这一点,所以我把它放在这里,使用类型 MarkupString
。设置是这样完成的:
MarkupRenderer.razor
@((MarkupString)Markup)
@code {
[Parameter]
public string Markup { get; set; }
}
然后在你的 parent 中你可以这样使用它:
Parent.razor*
.....
<MarkupRenderer Markup="@markupString" />
这将呈现出您正在寻找的标签和属性,以便将内容输出为 HTML。
关于此的官方文档非常简短,包括警告: "Rendering raw HTML constructed from any untrusted source is a security risk and should be avoided!",就是这样,如果您还没有记住这一点,请记住这一点。
我最终使用了 Markdig
<PackageReference Include="Markdig" Version="0.20.0" />
然后在我的 POCO 模型中包含一个未映射的字段:
[NotMapped]
public MarkupString HtmlQuestion { get; set; }
然后在我的服务层中添加了标记文本:
using Markdig;
...
q.HtmlQuestion = (MarkupString)Markdown.ToHtml(q.QuestionDescription);