Blazor使用MarkupString来呈现HTML,当字符串的值更改时不会刷新它



所以我使用这个解决方案示例#2来说明如何在Blazor中正确地渲染HTML,同时对进行净化

基本上,我试图制作一个框,在编辑标准标记和将其呈现为HTML之间切换。我使用Markdig包将标准Markdown字符串转换为HTML。

但我遇到的问题是,无论何时更新renderedHTMLMarkUpStringSanitizedComponent组件都保持不变。事实上,它总是和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);

尝试一下。祝你好运

相关内容

  • 没有找到相关文章

最新更新