如何在视图中使用多个模型/上下文(由 Id 路由)?

How to use a multiple models / contexts (routed by Id) in a View?

这是视图中的代码

@model BalanceSheets;
<tr class="row100 body">
       <td class="cell100 column1"><bold>@Html.DisplayNameFor(model => model.BalanceSheet2019.Inventories): </bold></td>
       <td class="cell100 column2">@string.Format(KiloFormat(Convert.ToInt64(Model.BalanceSheet2019.Inventories)), Model.BalanceSheet2019.Inventories)</td>
       <td class="cell100 column2">@string.Format(KiloFormat(Convert.ToInt64(Model.BalanceSheet2018.Inventories)), Model.BalanceSheet2018.Inventories)</td>
       <td class="cell100 column2">@string.Format(KiloFormat(Convert.ToInt64(Model.BalanceSheet2017.Inventories)), Model.BalanceSheet2017.Inventories)</td>
    </tr>

这是 BalanceSheets.cs 模型

public class BalanceSheets
{
    public BalanceSheet2019 BalanceSheet2019 { get; set; }
    public BalanceSheet2018 BalanceSheet2018 { get; set; }
    public BalanceSheet2017 BalanceSheet2017 { get; set; }
}

这是BalanceSheets2019/18/17.cs代码

public class BalanceSheet2019
{
    [Required]
    [Key]
    [Display(Name = "ID")]
    public int Id { get; set; } //1

    [Display(Name = "Cash and cash equivalents")] //4
    public double Cash_and_cash_equivalents{ get; set; }

    [Display(Name = "Short-term investments")] //4
    public double Short_term_investments { get; set; }

    .....

}

这是来自 BalanceSheetsController 的代码

public async Task<IActionResult> BalanceSheet(string Id)
    {
        if (Id == null)
        {
            return NotFound();
        }

        var balanceSheets = await _bscontext.BalanceSheet2019
            .FirstOrDefaultAsync(m => m.Id.ToString() == Id);

        if (balanceSheets == null)
        {
            return NotFound();
        }

        return View(balanceSheets);
    }

现在我拥有以下所有 bdcontext,但我不知道如何 return 将它们正确地显示为按 ID

查看
    private readonly BalanceSheets2019Context _bscontext;

    private readonly BalanceSheets2018Context _bscontext8;

    private readonly BalanceSheets2017Context _bscontext7;

通过使用该代码,我收到以下错误可能是因为我使用的是 "var balanceSheets = await _bscontext.BalanceSheet2019" 而不是其他东西 -> 处理请求时发生未处理的异常。 InvalidOperationException:传入 ViewDataDictionary 的模型项的类型为 'Project.Models.BalanceSheet2019',但此 ViewDataDictionary 实例需要类型为 'Project.Models.BalanceSheets' 的模型项。 Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible(对象值)

除非我遗漏了什么,否则你可以更新你的模型,给它补水然后return它:

var model = new BalanceSheets();
model.BalanceSheet2019 = await _bscontext.BalanceSheet2019
            .FirstOrDefaultAsync(m => m.Id.ToString() == Id);
model.BalanceSheet2018 = await _bscontext8.BalanceSheet2018
            .FirstOrDefaultAsync(m => m.Id.ToString() == Id);
model.BalanceSheet2017 = await _bscontext7.BalanceSheet2017
            .FirstOrDefaultAsync(m => m.Id.ToString() == Id);    

return View(model);

我不得不猜测其中的一些内容,但没有看到更多您的实体和数据库上下文。