Asp.net mvc 导致错误的局部视图

Asp.net mvc 导致错误的局部视图,asp.net-mvc,asp.net-mvc-4,partial-views,Asp.net Mvc,Asp.net Mvc 4,Partial Views,我创建了一个局部视图,它返回一个项目列表,其中ItemsId与传递给它的项目匹配 // // GET: /ItemOptions/Item/5 public ActionResult Item(int id = 0) { var itemoptions = db.ItemOptions.Where(o => o.ItemsId == id); return PartialView(itemoptions.ToList()); } 我试图使用以下代码在父项的详细信息页面上显

我创建了一个局部视图,它返回一个项目列表,其中
ItemsId
与传递给它的项目匹配

//
// GET: /ItemOptions/Item/5
public ActionResult Item(int id = 0)
{
    var itemoptions = db.ItemOptions.Where(o => o.ItemsId == id);
    return PartialView(itemoptions.ToList());
}
我试图使用以下代码在父项的详细信息页面上显示此内容:

@Html.Partial("../ItemOptions/Item", Model.ItemsId)
如果访问{URL}/itempoptions/Item/1,它将返回我希望看到的表。但是,如果我导航到试图包含局部视图的父项,则会出现以下错误:

传递到字典中的模型项的类型为“System.Int32”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[shopServer.Models.ItemOptions]”的模型项

我读过其他帖子,但不知道我错在哪里。我还了解到,我可能需要使用@Html.Action而不是局部视图,但我不确定哪种情况适合。

该方法直接呈现局部视图(不执行控制器逻辑),使用第二个参数中传递的对象作为模型实例。因此,正如错误所说,代码行
@Html.Partial(“../ItemOptions/Item”,Model.ItemsId)
正试图使用整数(Model.ItemsId)作为模型呈现局部视图,但局部视图需要
IEnumerable[shopServer.Models.ItemOptions]

根据局部视图的数据是否已加载到父视图的模型中,有2个选项可用于解决问题

如果在父视图中,模型已经包含项选项的集合,那么您可以使用Html.partial方法将它们传递给部分视图。因此,假设您可以在父视图的模型中具有类似于
itempoptions
的属性,则可以将该部分渲染为:

@Html.Partial("../ItemOptions/Item", Model.ItemOptions)
如果这是不可能的,并且父模型不知道您需要的部分视图数据,那么您需要执行控制器逻辑(这样您就可以为从数据库检索额外数据的部分视图填充模型)。在这种情况下,您需要的是一个子操作,使用该方法实现。您需要传递操作方法的控制器名称、操作名称和参数,如下所示:

@Html.Action("Item", "ItemOptions", new {id = Model.ItemsId})
使用第二个选项,将执行控制器操作方法中的逻辑,从数据库检索ItemOptions,呈现部分视图,并将生成的html包含到主视图中

您可以找到Html.Partial和Html.Action用法的快速经验法则


希望有帮助

你能详细说明你说的“导航到家长”是什么意思吗?例如,你是否输入了另一个URL、单击了链接等。?导航的代码或URL是什么样子的?我有另一个控制器,这就是我所说的父-项控制器,在这里我试图包含来自ItemOptions控制器的部分视图