【问题标题】:How do I display results for one Id on a partial View MVC5如何在部分视图 MVC5 上显示一个 Id 的结果
【发布时间】:2017-04-29 14:04:21
【问题描述】:

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

传入字典的模型项的类型为“System.Collections.Generic.List1[RestaurantApplication.Models.Restaurant]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[RestaurantApplication.Models.RestaurantReservationEvent]”。

这是我的控制器

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>
}

}

【问题讨论】:

  • 您需要将RestaurantReservationEvent 的集合传递给局部视图。这也不是部分视图调用。它正在执行一个动作方法
  • 谢谢@Shyju,但我只想要一个 id (RestaurantID) 怎么办
  • 你有一个叫RestaurantReservationsPartialView的动作方法吗?看起来怎么样?
  • 是的,它在我帖子的顶部,控制器
  • 我没看到。确保在问题中发布代码的相关部分。

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


【解决方案1】:

首先,您不是从主视图调用局部视图,而是使用返回局部视图结果的Html.Action 方法调用操作方法。

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

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

类似的东西。

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

假设RestaurantReservationEventsDbSet&lt;RestaurantReservationEvent&gt; 类型的DbContext 上的一个属性。 请更新返回餐厅列表的 linq 表达式以匹配您的情况

现在请确保您在调用操作方法时传递了餐厅 ID。

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

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

【讨论】:

  • 谢谢,这段代码运行良好,但我在使用 @Model.IEnumerable 时无法在视图中获取餐厅 ID?
  • 对于集合中的每个餐厅,您可能有一个 for/foreach 循环。对吗?使用循环变量的相关属性(例如:RestaurantId/Id)
  • 是的,我使用 for each 循环,但部分视图在进入该循环之前被调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多