显示每年缴纳会费的MemberOrg列表?

时间:2014-09-02 19:08:45

标签: c# asp.net-mvc razor asp.net-mvc-5

在我的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]”。`

有没有人对我显然做错了什么有任何想法?

1 个答案:

答案 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());