blazor - 是否可以在 Blazor 中为父组件和子组件指定两个不同的类型参数值?

标签 blazor blazor-server-side asp.net-blazor

请引用以下代码块。对于该代码块,我尝试将父组件值访问到子组件中,但它始终在子组件中返回空值。

<Parent TValue="TreeData">
 <Child TValue="TreeNode<TreeData>"></Child>
</Parent>

@code {
    public class TreeData
    {
        public string Value { get; set; }
    }
    public class TreeNode<TreeData>
    {
        public int Count { get; set; }
    }
}

**Parent Component:**

<CascadingValue Value="@this">
    @ChildContent
</CascadingValue>

**Child Component:** 

@code {
    [CascadingParameter]
    private Parent<TValue> ParentObj { get; set; }
    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        //Parent obj always returns the null value
        ParentObj?.UpdateChildProperties("UpdateData", this);
    }    
}

最佳答案

一些需要考虑的一般事项:

  • 确保您的子组件(或您的 _Imports.razor)具有该命名空间的 using 语句。
  • child 中的 [CascadingParameter] 必须是 public。
  • 将 [CascadingParameter] 的类型设为父级的名称(不带 .razor)
  • 如果您有多种不同的类型想要作为级联参数传递,那么只需在子级中创建另一个 [CascadingParameter] 即可。
  • 如果他们需要在子组件中使用相同的 [CascadingParameter],那么所有被传递的类型都必须从同一个类 (.razor) 继承。这个 .razor 可以是空的,只要确保包含 @inherits(无论您的基类型是什么)并使子中的 [CascadingParameter] 类型成为基的类型,并且在初始化时您可以检查类型并进行转换如果需要的话。

  • 我相信做这些事情应该可以解决这个问题,但正如柯蒂斯在评论中提到的那样 - 很难按照分离的方式来遵循这段代码。

    关于blazor - 是否可以在 Blazor 中为父组件和子组件指定两个不同的类型参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68937400/

    相关文章:

    components - 如何在两个同级 Blazor 组件之间进行通信?

    c# - Blazor WebAssembly 阻止 WebApi AllowAnonymous

    accessibility - Blazor FocusOnNavigate 设置 tabindex=-1

    entity-framework - 如何在 .NETCore 3.1 和 Blazor 中创建 DbContextFactory

    blazor - 在 'BlazorInputFile'中找不到 'window'

    blazor - 仅允许特定文件类型在 blazor 中上传

    blazor - 当我创建 Blazor WASM 项目时

    c# - 对运行时实例化的类使用依赖注入(inject)

    blazor - 具有自定义子组件的自定义 Blazor 组件

    Blazor - 如何防止文本框 (InputText) 中出现非数字字符?