c# - Blazor 将数据从父级传递给子级

标签 c# asp.net .net razor blazor

我有一个取决于其父类的 Razor 页面和第二个子类,它有自己的类并从其父类接收数据,我的问题是对 api 的第二次调用,数据没有传递给第二个 child ,当其父级更改其数据时,第二个子级不会被渲染,但它适用于第一个渲染并且正在传递数据。

父 Razor

@inherits ParentBase;

<FirstChild/>
<SecondChild data="@data"/>

FirstChild. Razor
@inherits ParentBase;

// call its parent method
<span  @onclick='(() => callApi())'/> 

ParentBase.cs
public class ParentBase : ComponentBase
{
   public Data data { get; set; }
   protected override async Task OnInitializedAsync()
   {
       data = await Services.GetData();
   }
   // call from a child
   public void callApi
   {
     data = await Services.GetData();
   }
}

SecondChild. Razor
<Table data="@data"/>

SecondChildBase.cs
public class SecondChildBase : ComponentBase
{
   [Parameter]
   public Data data { get; set; }

   protected override void OnParametersSet()
   {
       // this is not getting called
       StateHasChanged();
       Console.WriteLine(data);
   }
}

最佳答案

只是因为Parent.razorFirstChild.razor继承自同一个类,这并不意味着两个类的数据( public Data data { get; set; } )在更改时将具有相同的值。

当您调用 callApiFirstChild ,它会改变它自己的data , 如果要更改父级的 data , 你需要传递一个参数给 FirstChild这将是一个函数,当 span点击后会调用 ParentcallApi .

FirstChild. Razor

<span @onclick="OnClick">Call Parent function</span>

@code 
{
    // Call this EventCallback when the span is clicked
    [Parameter]
    public EventCallback OnClick { get; set; }
}

父 Razor
@inherits ParentBase;

@* Passing OnClick Parameter to call callApi*@
<FirstChild OnClick="@callApi" />
<SecondChild data="@data" />

关于c# - Blazor 将数据从父级传递给子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62172754/

相关文章:

c# - 在禁用的控件上显示工具提示

asp.net - RadGrid.Rebind() 和 RadGrid.MasterTableView.Rebind() 有什么区别?

c# - VB.NET 的方法体内不允许代码区域?

c# - 如何使用 Moq 对带有 stub 的 Windows Azure 表查询进行单元测试?

c# - 验证 POST 请求的输入?

asp.net - 具有来自 ASP.NET 的多个返回值的 JQuery Ajax

asp.net - 如何将现有的Azure Web角色转换为新型Azure网站?

c# - c#中多重继承和接口(interface)的区别

.net - 检索新插入的项目时虚拟属性为 null

c# - 当sql语句包含@时如何将Dapper与mysql一起使用