当字符串的值更改时,Blazor使用MarkupString呈现HTML不会刷新它
因此,我使用解决方案示例#2介绍如何在Blazor中正确呈现HTML,同时对其进行清理 基本上,我试图制作一个框,在编辑标准标记和将其呈现为HTML之间切换。我使用Markdig包将标准标记字符串转换为HTML 但我遇到的问题是,每当当字符串的值更改时,Blazor使用MarkupString呈现HTML不会刷新它,blazor,blazor-server-side,Blazor,Blazor Server Side,因此,我使用解决方案示例#2介绍如何在Blazor中正确呈现HTML,同时对其进行清理 基本上,我试图制作一个框,在编辑标准标记和将其呈现为HTML之间切换。我使用Markdig包将标准标记字符串转换为HTML 但我遇到的问题是,每当renderedHTML更新时,markupstringsanitized组件仍然保持不变。事实上,它始终与renderedHTML初始化时保持相同,不会得到更新。也许我做了数据绑定错误 下面是我如何使用editBox.razor <div> @
renderedHTML
更新时,markupstringsanitized组件仍然保持不变。事实上,它始终与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);
}
}
@如果(编辑模式)
{
...
输入框版本
...
}
其他的
{
}
...
@代码{
公共字符串renderedText{get;set;}=“这是一个标记字符串。
”;
private bool editMode=false;
专用异步任务切换模式(MouseEventArgs e)
{
editMode=!editMode;
等待标记HTML();
}
专用异步任务标记HTML()
{
var pipeline=new MarkdownPipelineBuilder().UseAdvancedExtensions().Build();
string renderedText=Markdown.ToHtml(文本,管道);
Console.WriteLine(“原始文本:\”“+文本+\”);
Console.WriteLine(“redneredtext:\”“+renderedText+\”);
wait base.InvokeAsync(StateHasChanged);
}
}
您的代码有一个简单的故障:
在MarkUpToHTML方法中,您正在生成渲染输出,但没有将其分配给renderedText全局变量,而是在方法的作用域上重新声明了它,因此它的值永远不会到达您想要的地方
因此,只要改变一下:
string renderedText = Markdown.ToHtml(Text, pipeline);
用于:
试试看。祝你好运
renderedText = Markdown.ToHtml(Text, pipeline);