一个视图上有多个查询结果

本文关键字:查询 结果 视图 一个 | 更新日期: 2023-09-27 18:14:34

我正在尝试学习c# .net,并考虑到所有关于。net核心的宣传,我将从那里开始,但我有点超出我的深度。

我有一个列表(让我们说'国家')从数据库。我点击一个国家,它就会显示该项目的详细信息。如此:

    // GET: Database/Details/00000000-0000-0000-0000-000000000000
    public async Task<IActionResult> Details(Guid? id)
    {
        if (id == null)
        {
            return NotFound();
        }
        var country = await _context.countries.SingleOrDefaultAsync(s => s.Id == id);
        if (subscription == null)
        {
            return NotFound();
        }
        return View(country);
    }

在details视图中,我想显示两个表。

第一个是'country',它将显示一般信息(资本,货币,大陆)。我现在可以做得很好。

第二个是城市列表(来自名为"cities"的表)。我该怎么做呢?我不知道如何向视图返回第二个结果集。

(希望这个比喻有助于解释它!)

一个视图上有多个查询结果

您需要返回一个ViewModel。因此,创建一个类IndexViewModel或你的动作是如何被调用的(这只是一个最佳实践,你可以按照你想要的方式命名它),并添加两个属性:

public class IndexViewModel
{
    public Country Country { get; set; }
    public List<City> Cities { get; set; }
}

然后在控制器中返回模型:

// GET: Database/Details/00000000-0000-0000-0000-000000000000
public async Task<IActionResult> Details(Guid? id)
{
    if (id == null || subscription == null)
    {
        return NotFound();
    }
    var model = new IndexViewModel();
    model.Country = await _context.countries.SingleOrDefaultAsync(s => s.Id == id);
    model.Cities = SomeFunction();
    return View(model);
}

在你的视图中,在文档的顶部添加一个引用:

@model IndexViewModel

您可以通过以下方式访问数据:

@Model.Country
@Model.Cities

您将需要创建一个ViewModel,该ViewModel为您提供存储这两个列表的位置,并将其传递给您的视图。在下面的例子。

public class MyViewModel{
    public IEnumerable<Country> Countries { get; set; }
    public IEnumerable<City> Cities { get; set; }
}