Blazor动态填充下拉列表时遇Service type not found错误求助
问题原因与解决方案
错误根源
你在Razor页面中使用了@inject TeamModel TeamModel,但TeamModel是普通的数据模型类,并非Blazor依赖注入(DI)系统中注册的服务。Blazor的DI只会管理服务类的实例,对普通数据模型不会自动提供实例,因此抛出找不到注册服务的错误。
修正步骤
移除不必要的注入代码
删除Razor页面中的@inject TeamModel TeamModel行,因为数据模型不需要通过DI注入,直接实例化即可。添加绑定属性
在后台代码(Home.razor.cs)中添加用于绑定下拉选中项的属性,用来存储用户选择的团队信息:// 用于绑定选中的团队,初始化空实例避免空引用 private TeamModel SelectedTeam { get; set; } = new TeamModel();修正表单与下拉列表代码
使用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
相关产品推荐
相关产品推荐

