自定义TextInput组件EditContext未初始化问题求助
问题解决方法
问题根源
你的自定义组件中,razor文件重复声明了@inherits InputBase<string?>,而后台partial类已经继承了InputBase<string?>。这种重复声明会干扰Blazor对基类中级联参数(EditContext)的注入逻辑,导致EditContext无法从父级EditForm正确传递过来。
具体解决方案
移除razor文件中的重复继承声明
删除TextInput.razor中的@inherits InputBase<string?>代码行。后台的partial类已经定义了继承关系,razor作为类的一部分会自动继承该基类,无需重复声明。(可选)修正样式参数的使用
你定义了InputCssClass参数但未在input标签中使用,可将input的class绑定调整为结合基类的CssClass(用于验证状态样式)和自定义的InputCssClass:<input @ref="Element" @bind="CurrentValueAsString" class="form-control @CssClass @InputCssClass" placeholder="@Placeholder" disabled="@Disabled"/>
修改后的完整razor代码
<div class="wrapper @WrapperCssClass"> @if(!string.IsNullOrWhiteSpace(Label)) { <label class="form-label lbl @(Required ? "required": "")">@Label</label> } <input @ref="Element" @bind="CurrentValueAsString" class="form-control @CssClass @InputCssClass" placeholder="@Placeholder" disabled="@Disabled"/> </div>
原理说明
InputBase基类已经通过[CascadingParameter]声明了EditContext属性,当组件处于EditForm内部时,EditForm会自动级联传递EditContext实例。重复的@inherits会破坏Blazor对基类参数的继承处理逻辑,导致级联参数无法正常注入。移除重复声明后,组件会正确继承InputBase的所有参数和生命周期逻辑,包括接收EditForm传递的EditContext。
内容的提问来源于stack exchange,提问作者Shahryar Saljoughi
相关产品推荐
相关产品推荐

