如何在部分视图MVC5

时间:2017-04-29 14:04:21

标签: asp.net-mvc entity-framework linq

我正在尝试显示当前登录餐厅的预订,但我收到以下错误。

传入字典的模型项的类型为&#39; System.Collections.Generic.List 1[RestaurantApplication.Models.Restaurant]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [RestaurantApplication.Models.RestaurantReservationEvent]&#39;。 < / p>

这是我的控制器

public ActionResult RestaurantReservationsPartialView()
    {
string currentUserId = User.Identity.GetUserId();

        var restaurantID = (from r in db.Restaurants
                            where r.OwnerId == currentUserId
                            select r).ToList();

        ViewBag.RestaurantId = restaurantID;

return PartialView("_RestaurantReservations", restaurantID);

这是调用PartialView的视图

<div style="padding-top: 50px;">
@Html.Action("RestaurantReservationsPartialView")
</div>

以下是部分视图,我想显示当前登录餐厅的预订列表。

@if (ViewBag.numReservations > 0 && ViewBag.ReservationStatus == "Pending")
{
<center><p id="pendingReservations">Here are your pending reservations</p>
</center>
<div class="row">
@foreach (var item in Model)
{

    <div class="col-md-4 col-sm-4 col-xs-6">
        <div class="panel panel-primary">
            <div class="panel-heading">
                <center><h1 class="panel-title">@Html.DisplayFor(modelItem => item.BookersName)</h1></center>
            </div>
            <div class="panel-body">
                <h3 style="font-size: 16px">Booking Description: @Html.DisplayFor(modelItem => item.BookingDesc) <br />
                Number of people: @Html.DisplayFor(modelItem => item.BookingNumberOfPeople)</h3>
                <h3 style="font-size: 15px">
                    <h>Booking Date: @Html.DisplayFor(modelItem => item.BookingDate) at</h>
                    <h>@Html.DisplayFor(modelItem => item.BookingStartTime)</h>
                </h3>
            </div>
            <div class="panel-footer">
                <center>@Html.ActionLink("Accept", "AcceptReservation", new { id = item.RestaurantReservationEventID }, new { @class = "btn btn-success btn-xs" }) @Html.ActionLink("Decline", "DeclineReservation", new { id = item.RestaurantReservationEventID }, new { @class = "btn btn-danger btn-xs" })</center>
            </div>
        </div>
    </div>
}

    }

1 个答案:

答案 0 :(得分:0)

首先,您从主视图调用部分视图,但使用Html.Action方法调用操作方法,该方法返回部分视图结果。

您的RestaurantReservationsPartialView操作方法正在将Restaurant个对象列表传递给它(部分)视图。但是从错误消息中,看起来您的部分视图被强类型化为RestaurantReservationEvent个对象的列表。您收到此模型类型不匹配错误,因为您将错误的类型传递给局部视图。

解决方案是传递正确的类型。由于您想要通过特定餐厅的预订,您可能希望接受餐馆ID作为您的行动方法的参数,使用它来获取预订事件并将其传递给视图。

像这样。

public ActionResult RestaurantReservationsPartialView(int id)
{
   var events = db.RestaurantReservationEvents.Where(x=>x.RestaurantId==id).ToList();
   return View(events);
}

假设RestaurantReservationEvents是类型为DbSet<RestaurantReservationEvent>的DbContext上的属性。 请更新linq表达式,该表达式会返回符合您情况的餐厅列表

现在确保在调用动作方法时传递了餐馆ID。

<div style="padding-top: 50px;">
   @Html.Action("RestaurantReservationsPartialView",,new { id=3})
</div>

这里我将Id值硬编码为3。您可以将其替换为具有实际值的变量。