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

Blazor动态填充下拉列表时遇Service type not found错误求助

问题原因与解决方案

错误根源

你在Razor页面中使用了@inject TeamModel TeamModel,但TeamModel是普通的数据模型类,并非Blazor依赖注入(DI)系统中注册的服务。Blazor的DI只会管理服务类的实例,对普通数据模型不会自动提供实例,因此抛出找不到注册服务的错误。

修正步骤

  1. 移除不必要的注入代码
    删除Razor页面中的@inject TeamModel TeamModel行,因为数据模型不需要通过DI注入,直接实例化即可。

  2. 添加绑定属性
    在后台代码(Home.razor.cs)中添加用于绑定下拉选中项的属性,用来存储用户选择的团队信息:

    // 用于绑定选中的团队,初始化空实例避免空引用
    private TeamModel SelectedTeam { get; set; } = new TeamModel();
    
  3. 修正表单与下拉列表代码
    使用Blazor内置的InputSelect组件替代直接手写<option>(原代码缺少<select>标签,不符合HTML结构),实现正确的双向绑定:

    @page "/"
    @using WasmInterface.Models
    @inject NavigationManager Navigation
    
    <EditForm Model="@SelectedTeam">
        <div class="form-group col-md-4">
            <label class="col-form-label" for="Team">Team : @(SelectedTeam?.ID ?? 0)</label>
            <InputSelect @bind-Value="@SelectedTeam.ID" class="form-control" id="Team">
                <option value="0">Please Select Team</option>
                @foreach (var item in teams)
                {
                    <option value="@item.ID">@item.Name</option>
                }
            </InputSelect>
        </div>
    </EditForm>
    

额外说明

  • 如果只需要绑定选中团队的ID,也可以用int类型的属性替代TeamModel:
    private int SelectedTeamId { get; set; } = 0;
    
    对应的InputSelect绑定改为@bind-Value="@SelectedTeamId",标签显示改为Team : @SelectedTeamId。
  • Blazor的@inject仅适用于服务类(比如框架提供的NavigationManager、自定义业务逻辑服务等),普通数据模型直接在组件内实例化或作为属性声明即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:49:54