在我的MVC5应用程序中,我目前正在处理2个表:
[MemberDues] -- [Id], [Year], [Display], [Amount]
[MemberDuesReceived] -- [Id], [MemberDuesId], [MemberOrgId], [PaidByUserId], [TransactionId], [Paid], [DatePaid], [PaymentMethod], [PayPalPaymentId], [PayPalPayerId], [PayPalPaymentState]
我有一个View(下方),其中显示了不同[MemberDues]
的记录:
@model IEnumerable<PROJECTdev.Models.MemberDues>
<script type="text/javascript" src="~/Areas/Admin/Scripts/Dues/Index.min.js"></script>
<div id="alert" style="display: none;"></div>
<table class="table table-striped">
<thead>
<tr>
<th class="col-md-2">
</th>
<th>
@Html.DisplayNameFor(model => model.Year)
</th>
<th>
@Html.DisplayNameFor(model => model.Display)
</th>
<th>
@Html.DisplayNameFor(model => model.Amount)
</th>
<th>View</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<a href="MemberDuesManage/Edit/@item.Id" class="btn btn-success btn-sm noDecoration"><span class="glyphicon glyphicon-pencil"></span> Edit</a>
<a href="MemberDuesManage/Delete/@item.Id" class="btn btn-default btn-sm noDecoration"><span class="glyphicon glyphicon-floppy-remove"></span> Delete</a>
</td>
<td>
@Html.DisplayFor(modelItem => item.Year)
</td>
<td>
@Html.EditorFor(modelItem => item.Display, new { htmlAttributes = new { @class = "form-control pull-left", style = "height: 20px; width: 20px;", onclick = "disableEnableDues(" + item.Id + ", this)" } })
</td>
<td>
@Html.DisplayFor(modelItem => item.Amount)
</td>
<td>
<a href="~/Admin/MemberDuesManage/DuesPaidMembers/@item.Id" class="btn btn-default btn-sm noDecoration"><span class="glyphicon glyphicon-list-alt"></span> Paid</a>
</td>
</tr>
}
</tbody>
</table>
我试图做的是,当点击[付费]按钮(链接)时,会显示一个视图,其中列出已缴纳会费的所有会员组织。为此,我必须向[MemberDuesReceived]
查询相应的[MemberDuesId]
并返回所有匹配[MemberDuesId]
&amp;的记录。 [Paid] == true
。我试过这个:
public async Task<ActionResult> DuesPaidMembers(int id)
{
MemberDues memberDues = await db.MemberDues.FindAsync(id);
return View(db.MemberDuesReceived.Where(mdr => mdr.MemberDuesId == memberDues.Id && mdr.Paid).ToListAsync());
}
然后我创建了一个名为DuesPaidMembers.cshtml
的视图,其中包含以下内容:
@model IEnumerable<PROJECTdev.Models.MemberDuesReceived>
@{
ViewBag.Title = "DuesPaidMembers";
Layout = "~/Areas/Admin/Views/Shared/_LayoutAdmin.cshtml";
}
<h2>DuesPaidMembers</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.MemberDues.Id)
</th>
<th>
@Html.DisplayNameFor(model => model.MemberOrganization.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.PaidByUser.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.TransactionId)
</th>
<th>
@Html.DisplayNameFor(model => model.Paid)
</th>
<th>
@Html.DisplayNameFor(model => model.DatePaid)
</th>
<th>
@Html.DisplayNameFor(model => model.PaymentMethod)
</th>
<th>
@Html.DisplayNameFor(model => model.PayPalPaymentId)
</th>
<th>
@Html.DisplayNameFor(model => model.PayPalPayerId)
</th>
<th>
@Html.DisplayNameFor(model => model.PayPalPaymentState)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.MemberDues.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.MemberOrganization.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.PaidByUser.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.TransactionId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Paid)
</td>
<td>
@Html.DisplayFor(modelItem => item.DatePaid)
</td>
<td>
@Html.DisplayFor(modelItem => item.PaymentMethod)
</td>
<td>
@Html.DisplayFor(modelItem => item.PayPalPaymentId)
</td>
<td>
@Html.DisplayFor(modelItem => item.PayPalPayerId)
</td>
<td>
@Html.DisplayFor(modelItem => item.PayPalPaymentState)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
@Html.ActionLink("Details", "Details", new { id=item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
目前,当我单击该按钮时,会调用适当的Controller Action(DuesPaidMember()
),但是当命中行return View(db.MemberDuesReceived.Where(mdr => mdr.MemberDuesId == memberDues.Id && mdr.Paid).ToListAsync());
时,会收到以下错误:
The model item passed into the dictionary is of type 'System.Threading.Tasks.Task
1 [System.Collections.Generic.List 1[PRISMdev.Models.MemberDuesReceived]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [PRISMdev.Models.MemberDuesReceived]”。`
有没有人对我显然做错了什么有任何想法?
答案 0 :(得分:2)
以下几行应该受到指责。
return View(db.MemberDuesReceived
.Where(mdr => mdr.MemberDuesId == memberDues.Id && mdr.Paid)
.ToListAsync());
您将ToListAsync
的结果作为模型传递,即Task<List<PRISMdev.Models.MemberDuesReceived>>
。
而是插入await
以便运行任务,并返回类型List<PRISMdev.Models.MemberDuesReceived>
的结果值作为您的模型:
return View(await db.MemberDuesReceived
.Where(mdr => mdr.MemberDuesId == memberDues.Id && mdr.Paid)
.ToListAsync());