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

Blazor中继承MudTextField后如何手动渲染父组件的Razor代码

简介

我正在尝试扩展MudBlazor库中MudTextField<T>组件的功能。通常我会创建包装器组件实现扩展,但这次要修改的逻辑仅存在于受保护方法中,因此我选择直接继承MudTextField<T>组件,目标是创建一个克隆版本,仅在重写特定方法修改的功能上和原组件有差异。

继承的组件

我首先创建了CustomMudTextField<T>组件,代码如下:
CustomMudTextField.razor

@using System.Runtime.CompilerServices
@using Microsoft.AspNetCore.Components.Rendering
@using Microsoft.AspNetCore.Components.RenderTree
@inherits MudTextField<T>
@typeparam T

@code
{
    // 自定义逻辑已省略
}

这种写法的问题是基控件的内容不会被渲染,因此我尝试手动触发基类渲染,参考官方文档的实现思路调整了代码:
CustomMudTextField.razor

@using System.Runtime.CompilerServices
@using Microsoft.AspNetCore.Components.Rendering
@using Microsoft.AspNetCore.Components.RenderTree
@inherits MudTextField<T>
@typeparam T

@CustomRender

@code
{
    private RenderFragment CustomRender { get; set; }
    private RenderFragment RenderBase() => builder =>
    {
        base.BuildRenderTree(builder);
    };

    protected override void OnInitialized()
    {
        base.OnInitialized();
        CustomRender = RenderBase();
    }

    // 自定义逻辑已省略
}

我预期调整后的组件表现会和基组件完全一致,现在父组件的UI确实能正常渲染了,但所有基础功能都无法正常工作。
我也尝试过相关技术讨论中提到的方案,但下面的代码片段甚至无法通过编译:

@inherits BaseComponent
@{ 
    base.BuildRenderTree(__builder);
}

那么我要如何渲染基控件的内容?

其他UI框架有专门用于渲染基控件的内置组件,我原本预期Blazor的实现会和@ChildContent机制类似,尽管二者是完全不同的概念。有没有办法继承并渲染MudTextField<T>,使其表现和原生组件完全一致?我到底遗漏了什么要点?

内容的提问来源于stack exchange,提问作者LuckyLikey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:02