.NET 7调用存储过程出现ViewDataDictionary类型不匹配问题求助
解决方法
错误核心是你传递给视图的是用户列表(List<UserEntity>),但视图期望接收单个用户实体(UserEntity),以下是具体修正步骤:
1. 修改数据查询逻辑
你的代码用ToListAsync()会把存储过程返回的结果包装成列表,替换成获取单个实体的方法即可:
- 用
SingleOrDefaultAsync():适合确定存储过程只会返回0条或1条记录的场景,如果返回多条会抛出异常 - 用
FirstOrDefaultAsync():如果存储过程可能返回多条但你只取第一条,或者允许用户不存在(返回null)的场景
修改后的代码:
public async Task<IActionResult> GetDetails(int userId) { var userIdParameter = new SqlParameter("@UserId", userId); var query = "exec GetSingleUserRecord @UserId"; var getSingleData = await _db.Users .FromSqlRaw(query, userIdParameter) .SingleOrDefaultAsync(); // 按需替换为FirstOrDefaultAsync() return View(getSingleData); }
2. 确认视图模型声明
检查你的视图文件顶部的模型声明,确保是单个实体类型:
@model Customer_Statements.Models.UserEntity
如果之前写的是@model IEnumerable<Customer_Statements.Models.UserEntity>或者List<...>,需要改成单个实体的声明。
内容的提问来源于stack exchange,提问作者Anara Baimagambetova
相关产品推荐
相关产品推荐

