Blazor组件内调用Employee服务出现空引用异常求助
问题分析与修复方案
核心错误点梳理
- 类型赋值错误:你把
Employee服务类的实例赋值给了EmployeeModel类型变量,两者类型不匹配,且调用了不存在的Employee()方法——服务类里的方法是GetEmployee()。 - 变量拼写错误:代码里的
emlpoyee是拼写失误,应该是employee;视图里的@Employee也应该对应代码里的小写变量@employee。 - 返回值类型不匹配:
GetEmployee()返回的是EmployeeModel对象,不能直接赋值给string类型变量,需要提取属性或序列化为字符串。
修复后的完整代码
Employee服务类(基础结构保留)
namespace Hydra.Services { public class Employee { public string url { get; set; } public async Task<EmployeeModel> GetEmployee(){ // 补充实际的API请求逻辑示例 using var client = new HttpClient(); return await client.GetFromJsonAsync<EmployeeModel>(url); } } // 假设的EmployeeModel模型(根据实际业务调整) public class EmployeeModel { public int Id { get; set; } public string Name { get; set; } public string Department { get; set; } } }
Company组件修复后代码
@page "/" <div>@company ...</div> <!-- 正常渲染公司详情 --> <div>@employeeDisplayText ...</div> <!-- 修复后渲染员工信息 --> @code { string company; EmployeeModel employee; string employeeDisplayText; protected override async Task OnInitializedAsync() { // 原有获取公司详情逻辑(保持不变) company = "XX科技有限公司"; // 修复后的员工服务调用逻辑 var employeeService = new Employee(); employeeService.url = "http://your-api-domain/employee"; // 替换为实际接口地址 employee = await employeeService.GetEmployee(); // 将模型转换为可显示的字符串 employeeDisplayText = $"员工姓名:{employee.Name},部门:{employee.Department}"; } }
额外优化建议
- 不要在组件或服务里手动
new HttpClient,推荐通过依赖注入获取实例,避免资源泄漏。 - 如果
Employee服务需要复用,可在Program.cs中注册为依赖服务:builder.Services.AddScoped<Employee>();,然后在组件中通过[Inject] public Employee EmployeeService { get; set; }注入使用,无需手动实例化。
内容的提问来源于stack exchange,提问作者elektra
相关产品推荐
相关产品推荐

