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

ASP.NET Core MVC中如何用单个控制器返回两个模型并绑定视图?

在ASP.NET Core MVC中返回多个模型并绑定视图的实现方法

方法一:使用强类型ViewModel(推荐)

这是MVC架构中最规范的实现方式,通过创建专门的视图模型类封装需要传递的多个数据集。

  1. 创建ViewModel类
    在项目中新增ViewModel文件夹(或放在Models目录下),定义包含两个列表的视图模型:
public class ETIndexViewModel
{
    public List<ET> ETList { get; set; }
    public List<ET> ETListOlmayanlar { get; set; }
}

注:ET为你项目中对应的实体类,需确保引用正确。

  1. 修改控制器方法
    将查询得到的两个列表赋值给ViewModel的属性,再将ViewModel传递给视图:
public IActionResult Index(string ilceler)
{
    var viewModel = new ETIndexViewModel();
    viewModel.ETList = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu != "YOK")
                            .OrderBy(p => p.KurumAdi)
                            .ToList();
    viewModel.ETListOlmayanlar = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu == "YOK")
                                      .OrderBy(p => p.KurumAdi)
                                      .ToList();

    return View(viewModel);
}
  1. 视图绑定强类型模型
    在对应的Index.cshtml视图开头指定模型类型,之后即可直接访问模型属性:
@model ETIndexViewModel

<h3>ET Durumu Değil Olan Kurumlar</h3>
<ul>
    @foreach (var item in Model.ETList)
    {
        <li>@item.KurumAdi</li>
    }
</ul>

<h3>ET Durumu YOK Olan Kurumlar</h3>
<ul>
    @foreach (var item in Model.ETListOlmayanlar)
    {
        <li>@item.KurumAdi</li>
    }
</ul>

方法二:使用ViewBag/ViewData(快速临时方案)

如果不想创建ViewModel,可通过ViewBag或ViewData传递数据,适合简单场景:

  1. 控制器中赋值
  • 使用ViewBag:
public IActionResult Index(string ilceler)
{
    ViewBag.ETList = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu != "YOK")
                          .OrderBy(p => p.KurumAdi)
                          .ToList();
    ViewBag.ETListOlmayanlar = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu == "YOK")
                                    .OrderBy(p => p.KurumAdi)
                                    .ToList();

    return View();
}
  • 使用ViewData:
public IActionResult Index(string ilceler)
{
    ViewData["ETList"] = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu != "YOK")
                              .OrderBy(p => p.KurumAdi)
                              .ToList();
    ViewData["ETListOlmayanlar"] = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu == "YOK")
                                        .OrderBy(p => p.KurumAdi)
                                        .ToList();

    return View();
}
  1. 视图中访问数据
  • ViewBag需做类型转换:
<h3>ET Durumu Değil Olan Kurumlar</h3>
<ul>
    @foreach (var item in ViewBag.ETList as List<ET>)
    {
        <li>@item.KurumAdi</li>
    }
</ul>
  • ViewData需显式强制转换:
<h3>ET Durumu YOK Olan Kurumlar</h3>
<ul>
    @foreach (var item in (List<ET>)ViewData["ETListOlmayanlar"])
    {
        <li>@item.KurumAdi</li>
    }
</ul>

方法三:使用ValueTuple(C# 7.0+支持)

可直接返回ValueTuple给视图,无需额外创建类:

  1. 控制器方法修改
public IActionResult Index(string ilceler)
{
    var ETList = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu != "YOK")
                      .OrderBy(p => p.KurumAdi)
                      .ToList();
    var ETListOlmayanlar = c.ETs.Where(p => p.Ilce == ilceler && p.ETDurumu == "YOK")
                                .OrderBy(p => p.KurumAdi)
                                .ToList();

    return View((ETList, ETListOlmayanlar));
}
  1. 视图中绑定访问
@model (List<ET> ETList, List<ET> ETListOlmayanlar)

<h3>ET Durumu Değil Olan Kurumlar</h3>
<ul>
    @foreach (var item in Model.ETList)
    {
        <li>@item.KurumAdi</li>
    }
</ul>

<h3>ET Durumu YOK Olan Kurumlar</h3>
<ul>
    @foreach (var item in Model.ETListOlmayanlar)
    {
        <li>@item.KurumAdi</li>
    }
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:55:30