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

在Razor视图中显示含多模型列表的ViewModel数据遇问题

问题分析与解决方案

嘿,我一眼就瞅出问题所在了——你把集合类型和单个对象搞混啦!

核心问题拆解

你的MyBigViewModel里,FirstModel是List<FirstModel>类型(也就是一个列表集合),但在Razor视图里你直接写@Html.DisplayFor(modelItem => item.FirstModel.Name),相当于试图给一个「列表对象」找Name属性——可列表本身根本没有这个属性啊!只有列表里的每一个FirstModel实例才会有Name。

下面给你两种解决方案,根据你的实际业务需求选就行:


方案1:如果每个MyBigViewModel只对应一个FirstModel实例

这应该是最符合你填充逻辑的场景——你是遍历FirstModelList里的单个SingleModel,再关联其他模型,那MyBigViewModel里的FirstModel就不该是列表,应该是单个对象。

  1. 先修改MyBigViewModel的定义:
public class MyBigViewModel { 
    public FirstModel FirstModel { get; set; } // 去掉List<>,改成单个对象
    public List<SecondModel> SecondModel { get; set; } 
    public List<ThirdModel> ThirdModel { get; set; } 
    public List<FourthModel> FourthModel { get; set; } 
    public List<FifthModel> FifthModel { get; set; } 
}
  1. 修正填充逻辑里的赋值(顺便提一句,原代码里对象初始化器用了分号,这是语法错误,要改成逗号):
List<MyBigViewModel> BigViewModel = new List<MyBigViewModel>(); 
foreach (var singleModel in FirstModelList) { 
    var secondModelResult = db.somequery; 
    var thirdModelResult = db.somequery; 
    var fourthModelResult = db.somequery; 
    var fifthModelResult = db.somequery; 

    MyBigViewModel tempViewModel = new MyBigViewModel{ 
        FirstModel = singleModel, // 直接赋值单个FirstModel实例
        SecondModel = secondModelResult, 
        ThirdModel = thirdModelResult, 
        FourthModel = fourthModelResult, 
        FifthModel = fifthModelResult 
    }; 
    BigViewModel.Add(tempViewModel); 
}
  1. 这时候视图里的访问就完全正常了:
@foreach (var item in Model)
{
    @Html.DisplayFor(modelItem => item.FirstModel.Name)
}

方案2:如果每个MyBigViewModel确实需要包含多个FirstModel实例

那你得在视图里做嵌套遍历,先遍历外层的大模型列表,再遍历每个大模型里的FirstModel集合:

@foreach (var bigItem in Model)
{
    <div>
        <h4>当前大模型对应的FirstModel列表:</h4>
        @foreach (var firstItem in bigItem.FirstModel)
        {
            <p>@Html.DisplayFor(modelItem => firstItem.Name)</p>
        }
    </div>
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:22:18