Blazor嵌套组件中onclick调用本地方法提示未定义问题求助
问题描述
我使用了嵌套的Blazor组件结构:MainLayout(基于示例项目修改)>Expeditions>EditExpedition>UpdateExpVessels。现在在UpdateExpVessels组件里,用onclick调用本地方法FlipEdit时,方法找不到,报错信息如下:
Uncaught ReferenceError ReferenceError: FlipEdit is not defined
at onclick (localhost꞉7281/editExpedition/1000:1:1)
请问在嵌套结构中调用同Blazor页面的方法是否需要特殊处理?
各组件代码参考
MainLayout组件代码:
<div class="top-row px-4 small-font"> <Expeditions /> </div>
Expeditions组件代码:
string path = "/editExpedition/" + expedition.ExpeditionID; <DropdownItem To="@path" Type="ButtonType.Link">@expedition.Name</DropdownItem>
EditExpedition组件代码:
<td width="25%"><UpdateExpVessels ID="@ID" /></td>
原UpdateExpVessels组件代码:
<Icon Name=IconName.Pencil Color=IconColor.Success onclick="FlipEdit"/> @code { [Parameter] public int? ID { get; set; } private bool editPage = true; public void FlipEdit() { editPage = !editPage; } }
解决方案
这和组件嵌套无关,纯粹是事件绑定语法用错了:
- 你写的
onclick="FlipEdit"是原生HTML事件绑定,它会去全局JS环境找FlipEdit函数,但你的FlipEdit是Blazor组件内部的C#方法,自然找不到。 - Blazor绑定C#方法需要用**
@onclick**(注意前面的@符号),这是Blazor的合成事件语法,能正确关联组件内的C#方法。
修改UpdateExpVessels组件的事件绑定代码即可:
<Icon Name=IconName.Pencil Color=IconColor.Success @onclick="FlipEdit"/>
另外补充:修改editPage后,Blazor会在合成事件触发后自动调用StateHasChanged()更新UI,不需要额外手动处理。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

