Blazor OnInitializedAsync方法在更改查询字符串值时未获得调用

Blazor OnInitializedAsync方法在更改查询字符串值时未获得调用,blazor,blazor-server-side,blazor-webassembly,Blazor,Blazor Server Side,Blazor Webassembly,我正在开发Blazor服务器端应用程序,并且有一个动态菜单绑定的标题。还有一个分类页面,我在其中根据标题菜单中已经绑定的查询字符串显示数据 OnInitializedAsync方法在我选择菜单后被调用,类别页面代表查询字符串值显示数据,但我再次打开菜单并选择不同的产品,则类别页面未被调用 下面是标题菜单的代码 Header.razor(在主布局页面上注册) @if(categoryDtos==null) { 加载。。。 } 其他的 { @foreach(分类中的var类别) { } } 公

我正在开发Blazor服务器端应用程序,并且有一个动态菜单绑定的标题。还有一个分类页面,我在其中根据标题菜单中已经绑定的查询字符串显示数据

OnInitializedAsync方法在我选择菜单后被调用,类别页面代表查询字符串值显示数据,但我再次打开菜单并选择不同的产品,则类别页面未被调用

下面是标题菜单的代码

Header.razor(在主布局页面上注册)

    @if(categoryDtos==null) { 加载。。。 } 其他的 { @foreach(分类中的var类别) {
  • } }
公共类标题库:组件库 { [注入]公共IToastService到ASTService{get;set;} [Inject]ICategoryService类别服务{get;set;} 公共列表类别{get;set;} 受保护的异步重写任务OnInitializedAsync() { var categoryLIst=await categoryService.GetCategories(); if(categoryLIst.Data!=null) { categoryDtos=categoryLIst.Data.ToList(); toastService.showsucture(“获取成功”); } 其他的 { toastService.bathror(categoryLIst.Message); } } }
Product.razor页面

 @page "/category/{categoryID}"

   <ul class="sidebar_categories">

                        @if (categoryTypeDtos == null)
                        {
                            <div>Loading...</div>
                        }
                        else
                        {
                            @foreach (var category in categoryTypeDtos)
                            {
                                <li><a href="#">@category.Name</a></li>
                            }
                        }
                    </ul>

 public class CategoryBase : ComponentBase
{
    [Inject] public IToastService toastService { get; set; }
    [Parameter] public string categoryID { get; set; }

    [Inject] ICategoryService categoryService { get; set; }

    public List<CategoryTypeDto> categoryTypeDtos { get; set; }

    protected async override Task OnInitializedAsync()
    {

        var response = await categoryService.GetCategoryTypeByID(Guid.Parse(categoryID));
        if (response.Data != null)
        {
            categoryTypeDtos = response.Data.ToList();
            toastService.ShowSuccess("Fetch successfully");
        }
        else
        {
            toastService.ShowError(response.Message);
        }
    }
}
@page”/category/{categoryID}
    @if(categoryTypeDtos==null) { 加载。。。 } 其他的 { @foreach(categoryTypeDtos中的var类别) {
  • } }
公共类类别库:ComponentBase { [注入]公共IToastService到ASTService{get;set;} [参数]公共字符串categoryID{get;set;} [Inject]ICategoryService类别服务{get;set;} 公共列表类别TypedTos{get;set;} 受保护的异步重写任务OnInitializedAsync() { var response=await categoryService.GetCategoryTypeByID(Guid.Parse(categoryID)); if(response.Data!=null) { categoryTypeDtos=response.Data.ToList(); toastService.showsucture(“获取成功”); } 其他的 { toastService.bathror(response.Message); } } }
只有在首次创建组件或页面时才会调用OnInitialized

呈现相同组件的新url将使用该实例。您需要使用OnParametersSetAsync

 @page "/category/{categoryID}"

   <ul class="sidebar_categories">

                        @if (categoryTypeDtos == null)
                        {
                            <div>Loading...</div>
                        }
                        else
                        {
                            @foreach (var category in categoryTypeDtos)
                            {
                                <li><a href="#">@category.Name</a></li>
                            }
                        }
                    </ul>

 public class CategoryBase : ComponentBase
{
    [Inject] public IToastService toastService { get; set; }
    [Parameter] public string categoryID { get; set; }

    [Inject] ICategoryService categoryService { get; set; }

    public List<CategoryTypeDto> categoryTypeDtos { get; set; }

    protected async override Task OnInitializedAsync()
    {

        var response = await categoryService.GetCategoryTypeByID(Guid.Parse(categoryID));
        if (response.Data != null)
        {
            categoryTypeDtos = response.Data.ToList();
            toastService.ShowSuccess("Fetch successfully");
        }
        else
        {
            toastService.ShowError(response.Message);
        }
    }
}