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

ASP.NET Core MVC:如何为主视图与分部视图传递各自模型数据

正确传递列表数据到分部视图的几种方案

方案一:使用ViewModel(推荐)

当主视图需要同时展示单个模型和列表数据时,创建ViewModel整合两者是最规范的做法,能避免ViewBag/TempData的动态类型问题:

  1. 创建ViewModel类:
public class UzytkownikViewModel
{
    public Uzytkownik SingleUzytkownik { get; set; } // 主视图所需的单个模型
    public List<Uzytkownik> UzytkownikList { get; set; } // 分部视图所需的列表
}
  1. 在控制器的Wyswietl方法中填充ViewModel:
public IActionResult Wyswietl()
{
    var viewModel = new UzytkownikViewModel
    {
        SingleUzytkownik = _db.Uzytkownik.FirstOrDefault(), // 获取单个用户数据
        UzytkownikList = _db.Uzytkownik.ToList() // 获取用户列表
    };
    return View("Index", viewModel);
}
  1. 修改Index视图的模型声明:
@model UzytkownikViewModel
  1. 调用分部视图时直接传入列表模型:
@await Html.PartialAsync("_PrivacyPartial", Model.UzytkownikList)
  1. 确保分部视图_PrivacyPartial.cshtml的模型声明正确:
@model List<Uzytkownik>

方案二:通过ViewBag传递(适合简单场景)

如果不想创建ViewModel,可通过ViewBag传递,但需注意显式类型转换:

  1. 控制器中填充ViewBag:
public IActionResult Wyswietl()
{
    var singleUzytkownik = _db.Uzytkownik.FirstOrDefault();
    ViewBag.UzytkownikList = _db.Uzytkownik.ToList();
    return View("Index", singleUzytkownik);
}
  1. 调用分部视图时转换类型并传入:
@await Html.PartialAsync("_PrivacyPartial", ViewBag.UzytkownikList as List<Uzytkownik>)

方案三:通过ViewData传递

逻辑与ViewBag类似,仅存储方式不同:

  1. 控制器中填充ViewData:
public IActionResult Wyswietl()
{
    var singleUzytkownik = _db.Uzytkownik.FirstOrDefault();
    ViewData["UzytkownikList"] = _db.Uzytkownik.ToList();
    return View("Index", singleUzytkownik);
}
  1. 调用分部视图时转换类型并传入:
@await Html.PartialAsync("_PrivacyPartial", ViewData["UzytkownikList"] as List<Uzytkownik>)

常见错误排查

  • 确保分部视图的模型声明与传入数据类型完全匹配,必须是@model List<Uzytkownik>而非单个Uzytkownik。
  • 使用ViewBag/ViewData时必须显式类型转换,否则分部视图无法识别模型类型。
  • 检查控制器中是否正确从数据库获取了列表数据,可通过断点调试确认数据是否为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:45:19