为什么此Blazor嵌入式组件无法正确更新

时间:2019-12-18 16:03:51

标签: c# asp.net-core blazor blazor-client-side

鉴于包含需要重用的代码的MainView.razor,可重用的代码将移至NewComponent.razor中。 NewComponent需要一个参数,在下面的示例中为Route route。该参数是通过参数规范传递的。

MainView.razor

<NewComponent route="@route" />

NewComponent.razor被增强,以便在控制台上记录所有更改。

NewComponent.razor

@code
{
    Route _route;
    [Parameter]
    public Route route
    {
        get { return _route; }
        set
        {
            Console.WriteLine("XXXXXXXXXXXXXXXX Route = " + value.Name);
            _route = value;
        }
    }

    protected override Task OnParametersSetAsync()
    {
        Console.WriteLine("YYYYYYYYYYYYYYYZZ");
        return base.OnParametersSetAsync();
    }
}

但是,从未指定控制台输出。更新Resource.razor

Route _route;
[Parameter]
public Route route
{
    get { return _route; }
    set
    {
        Console.WriteLine("Route changing to = " + value.Name);
        _route = value;
        StateHasChanged();
    }
}

输出路由正在更改,但从未出现NewComponent的控制台输出。为什么NewComponent不更新?

1 个答案:

答案 0 :(得分:0)

问题在于,NewComponent最初是在/Pages目录中编译的,然后移至项目中的/Components目录中。将鼠标悬停在<NewComponent route="@route" />上表明即使没有文件存储在.Pages命名空间中。彻底的重建可以解决此问题。