C# Blazor事件回调问题父/子组件“;没有与名称';匹配的属性;onclick回调'&引用;
问题 因此,我在Blazor中遇到了一个问题,我试图从子组件(NavMenu)调用MainLayout父组件中的一个方法。我所要做的就是在NavMenu子组件中的一个按钮告诉我打开MainLayout父组件中的一个对话框 我假设这是允许的,因为NavMenu和MainLayout的父/子概念仍然相同 我尝试过的 我已经遵循了这一原则,但我似乎根本无法实现这一目标。我希望我正在做一些愚蠢的事情,一双新的眼睛可能会发现这个问题 当前结果 基本上,一切都很好,但当我运行应用程序时,web控制台中会显示以下错误:C# Blazor事件回调问题父/子组件“;没有与名称';匹配的属性;onclick回调'&引用;,c#,html,events,callback,blazor,C#,Html,Events,Callback,Blazor,问题 因此,我在Blazor中遇到了一个问题,我试图从子组件(NavMenu)调用MainLayout父组件中的一个方法。我所要做的就是在NavMenu子组件中的一个按钮告诉我打开MainLayout父组件中的一个对话框 我假设这是允许的,因为NavMenu和MainLayout的父/子概念仍然相同 我尝试过的 我已经遵循了这一原则,但我似乎根本无法实现这一目标。我希望我正在做一些愚蠢的事情,一双新的眼睛可能会发现这个问题 当前结果 基本上,一切都很好,但当我运行应用程序时,web控制台中会显示
Error: System.InvalidOperationException: Object of type 'MyProject.Shared.Components.NavMenu' does not have a property matching the name 'OnClickCallback'.
代码
父组件(主布局)
文本值:@Text
@代码{
私有字符串文本{get;set;}
异步任务Foo()
{
text=“有效”;
//实际上,我会在屏幕上打开一个对话框
}
}
子组件(导航菜单)
设置测试应用程序设置
@代码{
[参数]
public EventCallback OnClickCallback{get;set;}
//我还尝试了“type”事件回调,例如public EventCallback OnClickCallback{get;set;}-但仍然得到相同的结果
}
这是我有史以来第一个堆栈溢出问题,所以希望我做得正确
提前谢谢大家
解决方案:
在一些有用的答案之后,这个问题是因为我有两个NavMenu组件,其中一个我认为主布局看不到,但事实并非如此,因此我消除了两者之间的歧义
一些答案还显示,我的父组件OnClickCallback=“@Foo()”应该是OnClickCallback=“Foo”,这实际上解决了我后来遇到的一个问题
“我的孩子”组件现在还使用:
调用父组件中的回调,父组件现在会按预期打开我的对话框
感谢所有帮助过它的人。错误非常明显: 。NavMenu“”没有与名称“OnClickCallback”匹配的属性 因此错误与您的代码不匹配。NavMenu子组件确实具有该参数属性 您应该使用
、no@
或()
,但这不能解释此错误
最好的猜测是,您有两个名为
的组件,您看到的是错误的组件。我更新了我的答案。尝试添加到问题底部的代码…解决方案
<NavMenu OnClickCallback="@Foo()">
<label>Text value: @text</label>
</NavMenu>
@code {
private string text { get; set; }
async Task Foo()
{
text = "IT WORKS";
// In reality I will actually open a dialog here on the screen
}
}
<MatNavItem AllowSelection="false" @onclick="OnClickCallback">
<MatIcon>settings</MatIcon><span class="miniHover"> Test App Settings</span>
</MatNavItem>
@code {
[Parameter]
public EventCallback OnClickCallback { get; set; }
// I have also tried the "type" event callbacks such as public EventCallback<bool> OnClickCallback { get; set; } - but still get the same result
}