传入字典的模型是'TestApp.Models.Registration.RegistrationVm'类型,但是这个字典需要一个System.String类型的模型项

时间:2015-06-21 15:43:48

标签: asp.net-mvc

我有Condition控制器:

Registration

public class RegistrationController : Controller { private RegistrationVmBuilder _registrationVmBuilder = new RegistrationVmBuilder(); public ActionResult Index() { return View(_registrationVmBuilder.BuildRegistrationVm()); } } 类:

RegistrationBuilder

public class RegistrationVmBuilder { public RegistrationVm BuildRegistrationVm() { RegistrationVm registrationVm = new RegistrationVm { Courses = GetSerializedCourseVms(), Instructors = GetSerializedInstructors() }; return registrationVm; } } 上课:

RegistrationVm

_Layout.cshtml:

public class RegistrationVm
{
    public string Courses { get; set; }
    public string Instructors { get; set; }
}

在索引视图中:

@model string <html ng-app="registrationModule"> <head> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script> <script src="~/Scripts/jquery-2.1.4.min.js"></script> <script src="~/Scripts/bootstrap.js"></script> <script src="~/Scripts/registration-module.js"></script> @RenderSection("JavascriptInHead") <link href="~/Content/bootstrap.min.css" rel="stylesheet" /> <link href="~/Content/bootstrap-state.min.css" rel="stylesheet" /> <title>College Registration</title> </head> <body> @RenderBody() </body> </html>

问题是当我运行应用程序时出现此错误:

  

传递到字典中的模型项是类型的   'TestApp.Models.Registration.RegistrationVm',但是这个   dictionary需要一个'System.String'类型的模型项。

1 个答案:

答案 0 :(得分:2)

shared _Layout.cshtml有一个声明的模型(@model string),它由任何使用它的视图继承。基本上,您的索引视图的模型(@model TestApp.Models.Registration.RegistrationVm)将被忽略。

我不知道为什么你的_Layout视图中有@model string(模型似乎没有在那里使用),但如果你想使用继承,请参阅Pass data to layout that are common to all pages

只需从共享布局中删除模型声明即可。