【问题标题】:The model item passed into the ViewDataDictionary传入 ViewDataDictionary 的模型项
【发布时间】:2017-09-26 06:54:36
【问题描述】:

您好,我的代码有问题,它似乎与实例有关,但我已经在控制器中声明了一个实例,它似乎不起作用。

我收到了这个错误:

InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为“Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[PEMCOLoan.DAL.Entities.spModels.spGetLedger]”,但此 ViewDataDictionary 实例需要类型为模型项'PEMCOLoan.Web.Models.Ledger'。

控制器

[HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult getEmployeeLedger(spGetLedger ledger)
    {
        var firstDay = _Context.LoanPayments.Min(min => min.DateOfPayment);
        var lastDay = _Context.LoanPayments.Max(max => max.DateOfPayment);

        //Set Test data

        //Set Parameter
        var StartDate = new SqlParameter("StartDate", firstDay);
        var EndDate = new SqlParameter("EndDate", lastDay);
        var EmpID = new SqlParameter("EmployeeID", ledger.EmployeeID);
        var LoanTypeID = new SqlParameter("LoanType", ledger.LoanTypeID);

        Ledger newLedger = new Ledger();

        newLedger.enumledger = _Context.Set<spGetLedger>().FromSql("EXECUTE spGetLedger @EmployeeID, @LoanType, @StartDate, @EndDate", EmpID, LoanTypeID, StartDate, EndDate).AsNoTracking();
        //var empLedger = _Context.getLedger
        return View(newLedger.enumledger);
    }

观看次数

@model PEMCOLoan.Web.Models.Ledger

@{ 
    ViewBag.Title = "Ledger";
}

<h2>View @Model.ledger.FullName's Ledger</h2>
<h3>Loan Name: @Model.ledger.LoanName</h3>
<h3>Total Loan Amount: @Model.ledger.TotalLoanAmount</h3>

@if (Model.enumledger.Any())
{
    <table class="table table-responsive">
        <tr>
            <th>Date Paid</th>
            <th>Principal Amount</th>
            <th>Interest</th>
            <th>Total</th>
        </tr>
        @foreach(var item in Model.enumledger)
        {
            <tr>
                <td>@Html.DisplayFor(modelItem => item.PaymentDate)</td>
                <td>@Html.DisplayFor(modelItem => item.TotalLoanAmount)</td>
                <td>@Html.DisplayFor(modelItem => item.Interest)</td>
                <td>@Html.DisplayFor(modelItem => item.Total)</td>
            </tr>
        }
    </table>
}
<h3>Balance: @Model.ledger.Balance</h3>

【问题讨论】:

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


    【解决方案1】:

    AsNoTracking 返回 IQueryable。将其更改为 .AsNoTracking().ToList() 以在该点强制检索。

    【讨论】:

    • 嗨!我的模型类的包装器中有一个错误,它似乎与 ViewDataDictionary 有关,错误显示如下:`InvalidOperationException:传递到 ViewDataDictionary 的模型项的类型为 'System.Collections.Generic.List1[PEMCOLoan. DAL.Entities.spM‌​odels.spGetLedger]',但这个 ViewDataDictionary 实例需要一个“PEMCOLoan.Web.Models.Ledger”类型的模型项。``
    • 更改视图(newLedger.enumledger);查看(新账本);
    【解决方案2】:

    您需要添加.ToList()

    Ledger newLedger = new Ledger();
    
    newLedger.enumledger = _Context.Set<spGetLedger>().FromSql("EXECUTE spGetLedger @EmployeeID, @LoanType, @StartDate, @EndDate", EmpID, LoanTypeID, StartDate, EndDate).AsNoTracking().ToList();
    
    return View(newLedger.enumledger);
    

    【讨论】:

    • 嗨,我现在已经改了。到AsNoTracking().ToList(),似乎又出现了另一个错误。 InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'System.Collections.Generic.List1[PEMCOLoan.DAL.Entities.spModels.spGetLedger]',但这个 ViewDataDictionary 实例需要一个“PEMCOLoan.Web.Models.Ledger”类型的模型项。`
    • 在视图中将模型更改为@model List
    • 嗨@Mostafa,如您所见,我在模型本身上设置了字典。你知道这有什么问题吗?谢谢!
    猜你喜欢
    • 2022-01-19
    • 2021-07-31
    • 1970-01-01
    • 2021-12-24
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多