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

如何将多个列表值传入ViewModel并完成Master模型属性正确赋值

代码修正方案

你现有代码存在3个会直接导致编译/运行失败的问题:

  • Table1类重复定义了同名属性sample1,属于笔误,第二个属性应为sample2
  • 实例化Master对象后未初始化内部的T1、T2集合属性,直接访问会抛出空引用异常
  • 遍历逻辑完全错误:你写的foreach(var row in T1)中T1既没有初始化也没有数据源,且双层循环的逻辑倒置——应该从数据库查询结果生成对应实体,再加入主模型的集合,而非遍历空集合嵌套数据库结果。

修正后的Model定义

// 主ViewModel(Master主模型)
public class Master
{
    // 直接初始化集合,从根源避免空引用异常
    public List<Table1> T1 { get; set; } = new List<Table1>();
    public List<Table2> T2 { get; set; } = new List<Table2>();
}

public class Table1
{
    // 修正重复的属性名
    public string sample1 { get; set; }
    public string sample2 { get; set; }
}

public class Table2
{
    public string sample1 { get; set; }
    public string sample2 { get; set; }
}

修正后的控制器赋值逻辑

不需要双层循环,直接遍历数据库查询结果,逐个生成对应实体加入主模型的集合即可:

public IActionResult DemoAction()
{
    // 实例化主ViewModel
    Master master = new Master();
    // 查询数据库数据,加ToList()一次性把数据拉到内存
    var getSamples = _db.dbSamples.Where(y => y.sample == "xxxx").ToList();

    // 遍历查询结果,映射为Table1对象加入T1集合
    foreach (var item in getSamples)
    {
        master.T1.Add(new Table1
        {
            sample1 = item.A,
            sample2 = item.B
        });
    }

    // T2赋值逻辑完全一致,查询对应数据源后映射加入master.T2即可
    // 示例:
    // var getT2Source = _db.Table2Source.Where(xxx).ToList();
    // foreach(var item in getT2Source)
    // {
    //     master.T2.Add(new Table2{ sample1 = item.Field1, sample2 = item.Field2 });
    // }

    return View(master);
}

视图中使用ViewModel的方式

之前用ViewData需要手动拆箱转类型,用强类型ViewModel只需要在视图最顶部声明模型类型,之后可以直接通过Model访问属性:

<!-- 替换为你自己项目下Master类的实际命名空间 -->
@model YourProjectName.Models.Master

<h3>T1列表数据</h3>
@foreach(var row in Model.T1)
{
    <div>sample1:@row.sample1,sample2:@row.sample2</div>
}

<h3>T2列表数据</h3>
@foreach(var row in Model.T2)
{
    <div>sample1:@row.sample1,sample2:@row.sample2</div>
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:48:10