为什么我在MVC应用程序的部分视图中出现字典错误?

时间:2018-05-15 15:10:11

标签: c# ajax asp.net-mvc partial-views

我在我的MVC网络应用程序上有一个编辑视图,其中包含一些部分视图。部分视图的目的是允许用户将数据添加到可能缺少的下拉列表中。部分视图适用于create视图,但不适用于edit视图。当您尝试编辑汽车时,parial视图会抛出错误:

  

传递到字典中的模型项是类型的   ' MyProject.Models.Car',但此词典需要一个模型项   类型' MyProject.Models.Manufacturer'。

这是我的代码的快照。我在这里使用Ajax表单。

修改

@model MyProject.Models.Car

@using (Ajax.BeginForm("Edit", "Car", new AjaxOptions { 
    HttpMethod = "POST", 
    OnSuccess = "success" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

    ...form fields etc
}
@Html.Partial("_Manufacturer")

_Manufacturer(局部视图)

@model MyProject.Models.Manufacturer
 @using (Ajax.BeginForm("Create", "Manufacturer", new AjaxOptions { 
    HttpMethod = "POST", 
    OnSuccess = "success" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

    ...form fields etc
}

正如您所看到的,编辑视图允许您编辑汽车,而部分视图(作为模态触发(引导程序4.0))允许您将制造商添加到其中一个下拉列表中。 / p>

我不确定为什么会导致字典错误,Manufacturer模型在局部视图中定义,所以不应该使用Car模型。这是否与我们正在编辑特定记录并因此将ID作为参数传递相关?

1 个答案:

答案 0 :(得分:3)

当你打电话给你的部分时:

B*

你没有把它传给模特。这意味着它将隐式传递调用视图的模型,在您的情况下是f(void*)

您需要做的是将模型添加到@Html.Partial("_Manufacturer") 来电:

MyProject.Models.Car