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

Razor Page从Model取单个值报错,如何改为Razor Page风格变量?

问题解决:Razor页面绑定IEnumerable模型报错及关联表访问

1. 报错原因与修复

把页面模型改成@model IEnumerable<OperationsCommandCenter.Models.CommandCenterModel>后,Model变成了集合对象,不再是单个CommandCenterModel实例。之前直接调用@Model.属性名的写法会报错,因为集合本身没有你定义的那些字符串或List属性。

正确访问方式:

  • 遍历所有实例(最常用):
@foreach(var item in Model)
{
    <!-- 访问字符串属性 -->
    <p>@item.你的字符串属性名</p>
    
    <!-- 访问List类型的关联属性 -->
    @foreach(var subItem in item.你的List属性名)
    {
        <span>@subItem.子属性名</span>
    }
}
  • 仅获取单个实例(比如第一个):
@{
    var singleModel = Model.FirstOrDefault();
    if(singleModel != null)
    {
        <p>@singleModel.你的属性名</p>
    }
}

2. 访问关联表数据

你的CommandCenterModel里的List属性就是关联表的导航属性,只要后端查询时提前加载这些数据,前端就能直接访问:

后端PageModel查询代码示例:

public async Task OnGetAsync()
{
    // 用Include加载关联表,替换成你实际的List属性名
    var data = await _dbContext.CommandCenter
        .Include(m => m.关联表List属性1)
        .Include(m => m.关联表List属性2)
        .ToListAsync();
    
    // 把数据传给页面模型
    return Page(data);
}

前端Razor页面访问关联数据:

@foreach(var mainItem in Model)
{
    <h3>主表数据:@mainItem.主表属性</h3>
    <h4>关联表数据:</h4>
    <ul>
        @foreach(var relatedData in mainItem.关联表List属性1)
        {
            <li>@relatedData.关联表属性</li>
        }
    </ul>
}

注意事项

  • 若只需要单个实体数据,没必要用IEnumerable做模型,直接用@model OperationsCommandCenter.Models.CommandCenterModel,后端返回单个实例即可
  • 后端必须用Include加载关联表,否则前端访问List属性会触发空引用错误
  • 永远不要直接对IEnumerable类型的Model调用实体属性,必须先遍历或提取单个实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:36:29