所以我使用这个解决方案示例#2来说明如何在Blazor中正确地渲染HTML,同时对进行净化
基本上,我试图制作一个框,在编辑标准标记和将其呈现为HTML之间切换。我使用Markdig包将标准Markdown字符串转换为HTML。
但我遇到的问题是,无论何时更新renderedHTML
,MarkUpStringSanitizedComponent
组件都保持不变。事实上,它总是和renderedHTML
初始化时一样,不会更新。也许我把数据绑定错了?
以下是我如何使用editBox.razor
内部的组件
<div>
@if (editMode)
{
...
input box version
...
}
else
{
<div class="editing-input inputs" @ondblclick="SwitchModes">
<MarkupStringSanitizedComponent Content="@renderedText"/>
</div>
}
</div>
...
@code{
public string renderedText {get; set;} = "<p class='markup'>This is a <em>markup string</em>.</p>";
private bool editMode = false;
private async Task SwitchModes(MouseEventArgs e)
{
editMode = !editMode;
await MarkUpToHTML();
}
private async Task MarkUpToHTML()
{
var pipeline = new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();
string renderedText = Markdown.ToHtml(Text, pipeline);
Console.WriteLine("original text: "" + Text + """);
Console.WriteLine("rednered text: "" + renderedText + """);
await base.InvokeAsync(StateHasChanged);
}
}
您的代码有一个简单的失败:
在MarkUpToHTML方法中,您正在生成渲染输出,但没有将其分配给renderedText全局变量,而是在方法的范围内重新声明了它,因此它的值永远不会到达您想要的位置。。。
因此,只需更改:
string renderedText = Markdown.ToHtml(Text, pipeline);
用于:
renderedText = Markdown.ToHtml(Text, pipeline);
尝试一下。祝你好运