如何在代码中获取blazer控件的引用并对控件进行修改?
Blazor 中获取控件/组件引用的实现方法
你提到的blazer应为Blazor框架,获取控件引用可通过官方提供的@ref指令实现,具体操作如下:
基础实现步骤
- 在Razor文件的目标控件标签上添加
@ref属性,绑定自定义的字段名 - 在
@code代码块中声明与控件类型匹配的同名字段,渲染完成后该字段会自动持有控件的引用
示例1:获取原生HTML元素引用
<!-- 页面标记部分 --> <input @ref="inputElement" type="text" value="初始值" /> <button @onclick="FocusInput">聚焦输入框</button> @code { // 原生HTML元素统一用ElementReference类型接收 private ElementReference inputElement; // 注入JS运行时用于操作原生元素 [Inject] private IJSRuntime JS { get; set; } private async Task FocusInput() { // 拿到引用后可通过JS互操作调整元素 await JS.InvokeVoidAsync("eval", "arguments[0].focus()", inputElement); } }
示例2:获取自定义/第三方Blazor组件引用
如果是自行封装的组件,或是MudBlazor、Ant Design Blazor这类第三方库的控件,直接用对应组件的类型作为字段类型即可:
<!-- 页面标记部分,以自定义的UserForm组件为例 --> <UserForm @ref="formRef" DefaultUserId="1001" /> <button @onclick="ResetForm">重置表单</button> @code { // 字段类型和目标组件类型完全一致 private UserForm formRef; private void ResetForm() { // 直接调用组件公开的属性、方法修改控件状态 formRef.Reset(); formRef.Title = "编辑用户信息"; } }
关键注意事项
- 引用仅在组件首次渲染完成后才会被赋值,在
OnInitialized、OnParametersSet这类前置生命周期中访问会得到null,需要在OnAfterRender/OnAfterRenderAsync生命周期中才能获取有效引用 - 自定义/第三方组件要访问的属性、方法必须声明为
public,否则无法通过引用调用 - 不要在渲染流程中修改引用对应的字段值,避免触发无限渲染循环
内容的提问来源于stack exchange,提问作者Joe K
相关产品推荐
相关产品推荐

