微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 MatBlazor

如何解决在 MatBlazor

我有一组两个 MatSelectItem 组件,代表一个项目及其环境。我有一个包含这些的简单数据结构:

         public static async Task<ProjectsDO> GetProjects(HttpClient client)
        {
            var projs = new ProjectsDO
            {
                Items = new List<Item>()
            };

            for (int i =0; i < 5; i++)
            {
                var envs = Enumerable.Range(0,5).Select(j => new Environments { Name = $"Proj {i} Env {j}" }).ToList();
                projs.Items.Add(new Item { Name = $"Proj {i}",Environments = envs });
            }

            return projs;
            //return await GetAsync<ProjectsDO>(client,"projects");
        }

选择项定义为:

<MatSelectItem Items="projItems" ValueChanged="(Item i) => OnProjectChanged(i)">
    <ItemTemplate>
        <span>@context?.Name</span>
    </ItemTemplate>
</MatSelectItem>

<MatSelectItem @bind-Value="selectedEnv" Items="selectedProject?.Environments ?? new List<Environments>()">
    <ItemTemplate>
        <span>@(context?.Name ?? "Null")</span>
    </ItemTemplate>
</MatSelectItem>

填写数据的代码很简单:

    private ProjectsDO projects;
    private List<Item> projItems= new List<Item>();
    private Item selectedProject;
    private Environments selectedEnv;


    protected override async Task OnInitializedAsync() => await ReadData();

    private async Task ReadData()
    {
        projects = await GetProjects(Http);
        projItems = projects.Items;
        Console.WriteLine($"In {nameof(ReadData)}");

    }

    private void OnProjectChanged(Item newProj)
    {
        selectedEnv = null;
        selectedProject = newProj;
    }

当我将项目选择更改为一个值时,我会在第二个选择中获得环境列表。当我再次更改它时,我得到了一个例外。我猜它不喜欢我将第二个(envs)所选项目设置为空。

执行此操作的正确方法是什么。似乎是一项简单的任务,但它正在踢我的......

我在 .net 5 正式版上运行,在 VS2019 最新预览版的 Win10 机器上

谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。