You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor级联参数相互干扰:为何两个参数值显示一致?

问题分析与解决方案

你遇到的两个变量显示一致的问题,源于两处代码错误:

1. 级联参数类型不匹配

父组件(index)中selectedNumberTwo定义为非可空int类型,但子组件中对应的级联参数是可空int?类型。虽然C#允许隐式转换,但Blazor的级联绑定机制在类型不一致时,可能出现值传递异常,导致子组件无法正确接收selectedNumberTwo的更新值。

2. 异步方法缺少等待逻辑

SelectNumberOne和SelectNumberTwo标记为async Task,但内部没有任何异步等待操作。这种写法会触发编译器警告,甚至干扰Blazor的渲染生命周期,导致UI无法及时响应选中值的变化。


修正后的代码

父组件(index)代码修改

将selectedNumberTwo改为可空int?类型,与子组件参数保持一致;同时将异步方法改为同步方法(或补充异步等待逻辑):

<div class="col-sm-12 col-lg-2">
    <select class="fluent-input" @onchange="SelectNumberOne">
        @for (int i = 10; i < 20 + 9; i++)
        {
            <option value="@i">@i</option>       
        }
    </select>
</div>

<div class="col-sm-12 col-lg-2">
    <select class="fluent-input" @onchange="SelectNumberTwo">
        @for (int i = 10; i < 20 + 9; i++)
        {
            <option value="@i">@i</option>
        }
    </select>
</div>

<MudCard Elevation="1" Class="mb-5">
    <CascadingValue Value="selectedNumberOne" Name="one">
        <CascadingValue Value="selectedNumberTwo" Name="two">
            <TestComponent @ref="testComponent"></TestComponent>
        </CascadingValue>
    </CascadingValue>
</MudCard>

@code{
    TestComponent? testComponent;

    private int? selectedNumberOne { get; set; }
    // 改为可空int类型,匹配子组件参数
    private int? selectedNumberTwo { get; set; }

    // 改为同步方法,避免异步无等待问题
    void SelectNumberOne(ChangeEventArgs e)
    {
        selectedNumberOne = Convert.ToInt32(e.Value.ToString());
    }

    void SelectNumberTwo(ChangeEventArgs e)
    {
        selectedNumberTwo = Convert.ToInt32(e.Value.ToString());
    }

    // 若需保留异步方法,需补充await逻辑
    // async Task SelectNumberOne(ChangeEventArgs e)
    // {
    //     selectedNumberOne = Convert.ToInt32(e.Value.ToString());
    //     await Task.CompletedTask;
    // }

    // async Task SelectNumberTwo(ChangeEventArgs e)
    // {
    //     selectedNumberTwo = Convert.ToInt32(e.Value.ToString());
    //     await Task.CompletedTask;
    // }
}

子组件代码无需修改

子组件的级联参数Name已正确匹配父组件的CascadingValue,类型修正后即可正常接收值。


修正完成后,选择不同数字时,子组件将正确展示两个独立的选中值。

内容的提问来源于stack exchange,提问作者Lisa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 17:17:38