我正在尝试显示当前登录餐厅的预订,但我收到以下错误。
传入字典的模型项的类型为' 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>
}
}
答案 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
。您可以将其替换为具有实际值的变量。