Как использовать несколько моделей / контекстов (маршрутизируемых Id) в представлении? - PullRequest
1 голос
/ 21 апреля 2020

Это код из представления

@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);
    }

Теперь у меня есть все следующие bdcontexts, и я не знаю, как правильно вернуть их в View по идентификатору

    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 (значение объекта)

1 Ответ

1 голос
/ 21 апреля 2020

Если я что-то упустил, вы можете просто обновить свою модель, гидрировать ее и вернуть:

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);

Мне пришлось кое-что догадаться, не видя больше ваших сущностей и дб. контексты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...