我在 VS 2022 中有一个 Blazor .net 6 服务器端项目。我的 razor 页面有两个组件,我想将数据从组件 1 传递到组件 2。
Comp1 有一个按钮,单击该按钮将触发一个事件:
//Component1.razor
<input type="button" value="PassTheData" @onclick="PassTheData" />
//Component1.razor.cs
[Parameter] public string TheData { get; set; } = string.Empty;
[Parameter] public EventCallback<string> PassTheDataEvent { get; set; }
....
private async void PassTheData() {
TheData = "DATA!!!!!!!!!!!!!!!!!!";
await PassTheDataEvent.InvokeAsync(TheData);
}
Comp2 具有最少的代码来仅接收数据:
//Component2.razor
<h3>Comp 2</h3>
The data is: @TheDataComp2
//Component2.razor.cs
[Parameter] public string TheDataComp2 { get; set; } = string.Empty;
我的理解是父页面获取comp1到comp2的数据。在 comp1 标记中,我将 comp1 属性绑定到父属性,并将该父属性传递给 comp2:
//Parent1.razor
<Comp1 @bind-TheData="theDataParent"></Comp1>
<br />
<Comp2 TheDataComp2="@theDataParent"></Comp2>
//Parent1.razor.cs
private string theDataParent = string.Empty;
但是,当我加载父页面时,我收到此错误:
[2023-08-24T17:45:15.942Z] 错误:System.InvalidOperationException:“UI.Comp1”类型的对象没有与名称“TheDataChanged”匹配的属性。在 Microsoft.AspNetCore.Components.Reflection.ComponentProperties.ThrowForUnknownIncomingParameterName(类型 targetType,字符串参数名称) 在 Microsoft.AspNetCore.Components.Reflection.ComponentProperties.SetProperties(ParameterView& 参数,对象目标) 在 Microsoft.AspNetCore.Components.ParameterView.SetParameterProperties(对象)目标)在 Microsoft.AspNetCore.Components.ComponentBase.SetParametersAsync(ParameterView 参数) 在 Microsoft.AspNetCore.Components.Rendering.ComponentState.SupplyCombinedParameters(ParameterView directAndCascadingParameters)
我不明白正在寻找的这个名为 TheDataChanged 的属性是什么。有人可以帮忙吗?如果我删除 @bind-TheData="theDataParent"
标记,页面加载正常。
如果您有一个名为的参数
TheData
,则EventCallback
必须命名TheDataChanged
该参数(参数名称+“已更改”)才能使绑定语法起作用。