You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server中Monaco DiffEditor配置问题求助

Blazor Monaco DiffEditor 配置解决方案

你的问题核心在于初始化时机错误和未正确为原始/修改编辑器配置语言选项,以下是修正后的完整实现代码及关键说明:

完整 Razor 代码

@using BlazorMonaco;

<ErrorBoundary>
    <div class="padding" style="height:10rem">
        <MonacoDiffEditor 
            Id="diffEdit" 
            @ref="diffEditor" 
            ConstructionOptions="GetDiffConstructionOptions" 
            OriginalEditorConstructionOptions="GetOriginalEditorOptions"
            ModifiedEditorConstructionOptions="GetModifiedEditorOptions"
            CssClass="monaco_h" />
    </div>
</ErrorBoundary>

@code 逻辑部分

MonacoDiffEditor? diffEditor { get; set; }

// 示例有效JSON内容,确保格式正确
string string1 = @"{""name"":""张三"",""age"":25}";
string string2 = @"{""name"":""张三"",""age"":26,""city"":""北京""}";

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender && diffEditor != null)
    {
        await SetEditors();
    }
    await base.OnAfterRenderAsync(firstRender);
}

// 原始编辑器专属配置
private StandaloneEditorConstructionOptions GetOriginalEditorOptions()
{
    return new StandaloneEditorConstructionOptions()
    {
        AutomaticLayout = true,
        Language = "json",
        ReadOnly = true
    };
}

// 修改后编辑器专属配置
private StandaloneEditorConstructionOptions GetModifiedEditorOptions()
{
    return new StandaloneEditorConstructionOptions()
    {
        AutomaticLayout = true,
        Language = "json",
        ReadOnly = false
    };
}

// Diff编辑器全局配置
private DiffEditorConstructionOptions GetDiffConstructionOptions()
{
    return new DiffEditorConstructionOptions()
    {
        AutomaticLayout = true,
        OriginalEditable = false
    };
}

async Task SetEditors()
{
    if (diffEditor == null) return;
    
    await diffEditor.OriginalEditor.SetValue(string1);
    await diffEditor.ModifiedEditor.SetValue(string2);
}

关键改动说明

  • 调整初始化时机:将内容设置逻辑移至OnAfterRenderAsync,仅在首次渲染完成且diffEditor实例存在时执行,避免组件未初始化导致的空引用问题。
  • 单独配置子编辑器:通过OriginalEditorConstructionOptions和ModifiedEditorConstructionOptions分别为两个子编辑器指定JSON语言、自动布局等参数,这是JSON语法高亮生效的核心。
  • 使用有效JSON格式:示例中采用标准JSON字符串,确保Monaco能正确识别并启用语法高亮。
  • 增加空引用检查:在SetEditors中添加diffEditor非空判断,提升代码健壮性。

内容的提问来源于stack exchange,提问作者Michał Poterek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:21:31