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

时间:2016-10-24 15:59:59

标签: c# asp.net-core asp.net-core-mvc entity-framework-core

我正在尝试学习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);
    }

在详细信息视图中,我想显示两个表。

第一个是&#39; country&#39;,它将显示通用信息(Capital,Currency,Continent)。我现在可以做得很好。

第二个是城市列表(来自名为&#39; Cities&#39;的表)。我该怎么做?我无法解决如何将第二个结果集返回到视图的问题。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

您需要返回ViewModel。因此,创建一个类IndexViewModel或如何调用您的操作(这只是一个最佳实践,您可以根据需要命名)并添加2个属性:

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
相关问题