ASP.NET MVC 5视图中遍历存储过程返回的查询结果报错如何解决
问题原因
你遇到的报错本质是属性调用的对象类型不匹配:
- 你视图声明的Model是
List<sp_caw_pocs_Result>集合类型,FirstName是集合内单个sp_caw_pocs_Result实例的属性,不是集合本身的属性,直接调用Model.FirstName就会触发该报错。 - 额外注意报错信息里出现的
FirstNName拼写,检查是否存在属性名手误多打了字母N的情况。
修复方案
你当前的Model类型声明本身是正确的,只需要按集合遍历的写法调用属性即可:
@model List<PWBMS.DAL.sp_caw_pocs_Result> @* 遍历集合内的每一个元素再访问属性 *@ @foreach (var pocItem in Model) { <div> <span>姓名:@pocItem.FirstName</span> <!-- 其他属性渲染逻辑 --> </div> }
如果仍有IDE波浪线提示,可在视图顶部补充命名空间引用简化声明,避免命名空间拼写错误:
@using PWBMS.DAL @model List<sp_caw_pocs_Result>
更灵活的存储过程调用方案
如果你不想依赖EF自动生成的sp_caw_pocs_Result类(避免EF模型刷新时自动生成类被覆盖影响视图),可以自定义DTO类做中间层:
- 定义DTO类和存储过程返回字段对应
public class CawPocDto { public string FirstName { get; set; } // 补充其他需要用到的字段 }
- 控制器中转换查询结果为DTO列表
var resultList = db.sp_caw_pocs(id) .Select(r => new CawPocDto { FirstName = r.FirstName, // 其他字段赋值 }) .ToList(); return PartialView("_CAWPocs", resultList);
- 视图修改Model声明为自定义DTO类型即可
@model List<CawPocDto>
这种方式解耦了EF自动生成类和视图的依赖,后续可维护性更高。
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

