如何在视图中使用多个模型/上下文(由 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);
我不得不猜测其中的一些内容,但没有看到更多您的实体和数据库上下文。
这是视图中的代码
@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);
我不得不猜测其中的一些内容,但没有看到更多您的实体和数据库上下文。