Asp.net 获得;传递到字典中的模型项为“类型”;MVC5应用程序中的异常

Asp.net 获得;传递到字典中的模型项为“类型”;MVC5应用程序中的异常,asp.net,asp.net-mvc,invalidoperationexception,Asp.net,Asp.net Mvc,Invalidoperationexception,我在这里看到了很多这样的问题,但答案似乎都指向了我在做什么。救命啊!!!以下是代码片段: 在MVC5控制器中,注册控制器: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Angular4DotNetMvc.Models.Registration; namespace Angular4DotNetMvc.Control

我在这里看到了很多这样的问题,但答案似乎都指向了我在做什么。救命啊!!!以下是代码片段:

在MVC5控制器中,注册控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Angular4DotNetMvc.Models.Registration;

namespace Angular4DotNetMvc.Controllers
{
    public class RegistrationController : Controller
    {

        private RegistrationVmBuilder _registrationVmBuilder = new RegistrationVmBuilder();

        // GET: Registration
        public ActionResult Index()
        {
            RegistrationVm registration = _registrationVmBuilder.BuildRegistrationVm();
            return View(registration);
        } // end public ActionResult Index()

    } // end public class RegistrationController : Controller

} // end namespace Angular4DotNetMvc.Controllers
注册VM类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Angular4DotNetMvc.Models.Registration
{

    /// <summary>
    /// Registration View Model Class
    /// </summary>
    public class RegistrationVm
    {
        public string Courses { get; set; }
        public string Instructors { get; set; }
    } // end public class RegistrationVm

} // end namespace Angular4DotNetMvc.Models.Registration
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
命名空间Angular4DotNetMvc.Models.Registration
{
/// 
///注册视图模型类
/// 
公共类注册VM
{
公共字符串{get;set;}
公共字符串指令器{get;set;}
}//结束公共类注册VM
}//结束命名空间Angular4DotNetMvc.Models.Registration
视图Index.cshtml:

@model Angular4DotNetMvc.Models.Registration.RegistrationVm
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>
@model Angular4DotNetMvc.Models.Registration.RegistrationVm
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
指数
注册VMBuilder类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Angular4DotNetMvc.Models.Courses;
using Angular4DotNetMvc.Models.Instructors;

namespace Angular4DotNetMvc.Models.Registration
{

    /// <summary>
    /// Registration View Model Builder Class
    /// </summary>
    public class RegistrationVmBuilder
    {

        /// <summary>
        /// Constructor
        /// </summary>
        /// <returns>A RegistrationVm Instance</returns>
        public RegistrationVm BuildRegistrationVm()
        {
            var registrationVm = new RegistrationVm
            {
                Courses = GetSerializedCourses(),
                Instructors = GetSerializedInstructors()
            };

            return registrationVm;
        } // end public RegistrationVm BuildRegistrationVm()


        /// <summary>
        /// Get Serialized Courses
        /// </summary>
        /// <returns>A JSON string of serialized courses</returns>
        public string GetSerializedCourses()
        {
            var courses = new[]
            {
                new CourseVm {Number = "CREA101", Name = "Care of Magical Creatures", Instructor = "Rubeus Hagrid"},
                new CourseVm {Number = "DARK502", Name = "Defense Against the Dark Arts", Instructor = "Severus Snape"},
                new CourseVm {Number = "TRAN201", Name = "Transfiguration", Instructor = "Minerva McGonagal"}
            };
            var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };
            var serializedCourses = JsonConvert.SerializeObject(courses, Formatting.None, settings);
            return serializedCourses;
        } // end public string GetSerializedCourses()

        /// <summary>
        /// Get Serialized Instructors
        /// </summary>
        /// <returns>A JSON string of serialized instructors</returns>
        public string GetSerializedInstructors()
        {
            var instructors = new[]
                {
                    new InstructorVm {Name = "Rubeus Hagrid", Email = "hagrid@hogwarts.com", RoomNumber = 1001},
                    new InstructorVm {Name = "Severus Snape", Email = "snape@hogwarts.com", RoomNumber = 105},
                    new InstructorVm {Name = "Minerva McGonagall", Email = "mcgonagall@hogwarts.com", RoomNumber = 102},
                };
            var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() };
            var serializedInstructors = JsonConvert.SerializeObject(instructors, Formatting.None, settings);
            return serializedInstructors;
        } // end public string GetSerializedInstructors()

    } // end public class RegistrationVmBuilder

} // end namespace Angular4DotNetMvc.Models.Registration
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用Newtonsoft.Json;
使用Newtonsoft.Json.Serialization;
使用Angular4DotNetMvc.Models.Courses;
使用Angular4DotNetMvc.Models.Instructors;
命名空间Angular4DotNetMvc.Models.Registration
{
/// 
///注册视图模型生成器类
/// 
公共类注册VMBuilder
{
/// 
///建造师
/// 
///注册VM实例
公共注册VM BuildRegistrationVm()
{
var registrationVm=新注册vm
{
课程=GetSerializedCourses(),
讲师=GetSerializedInstructors()
};
返回注册VM;
}//结束公共注册VM BuildRegistrationVm()
/// 
///获取序列化课程
/// 
///序列化课程的JSON字符串
公共字符串GetSerializedCourses()
{
var课程=新[]
{
新课程{Number=“CREA101”,Name=“魔法生物护理”,讲师=“鲁伯·海格”},
新课程{Number=“DARK502”,Name=“黑魔法防御”,讲师=“西弗勒斯·斯内普”},
新课程{Number=“TRAN201”,Name=“变形”,讲师=“Minerva McGonagal”}
};
var settings=new JsonSerializerSettings{ContractResolver=new CamelCasePropertyNamesContractResolver()};
var serializedCourses=JsonConvert.SerializeObject(课程,格式化。无,设置);
返回序列化课程;
}//结束公共字符串GetSerializedCourses()
/// 
///获取序列化的讲师
/// 
///序列化讲师的JSON字符串
公共字符串getSerializedStructors()
{
var讲师=新[]
{
新讲师VM{Name=“Rubeus Hagrid”,电子邮件=”hagrid@hogwarts.com,RoomNumber=1001},
新讲师VM{Name=“Severus Snape”,电子邮件=”snape@hogwarts.com,RoomNumber=105},
新讲师VM{Name=“Minerva McGonagall”,电子邮件=”mcgonagall@hogwarts.com,RoomNumber=102},
};
var settings=new JsonSerializerSettings{ContractResolver=new CamelCasePropertyNamesContractResolver()};
var serializedStructors=JsonConvert.SerializeObject(讲师,格式化。无,设置);
返回序列化结构;
}//结束公共字符串GetSerializedStructors()
}//结束公共类注册VMBuilder
}//结束命名空间Angular4DotNetMvc.Models.Registration
调用URL时,
http://localhost:3757/Registration
我得到以下错误:

传递到字典中的模型项的类型为 “Angular4DotNetMvc.Models.Registration.RegistrationVm”,但是 字典需要类型为“System.String”的模型项

当视图声明一个
RegistrationVm
并在控制器中传递该类的实例时,为什么需要一个
System.String


谢谢。

我发现了问题。它位于/Shared/_Layout.cshtml文件中(上面我的源代码清单中未显示)

@model Angular4DotNetMvc.Models.Registration.RegistrationVm
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
指数

_Layout.cshtml有一个“@model string”语句,该语句与从RegistrationController传递的模型RegistrationVm类冲突。为了解决这个问题,我创建了另一个没有模型的共享文件_StrongLayout.cshtml,并在Index.cshtml中引用了它。这允许从控制器传递任何强类型模型。

您的错误发生在哪一行?您是否在视图中以某种方式使用
模型
?您需要显示视图以及视图可能引用的任何部分。我正在学习Pluralsight课程中的示例,AngularJS面向.NET开发人员。在课程视频之后,我正在实现一个minipa。在这一点上,我已经修改了这个观点:我正在学习Pluralsight课程,AngularJS面向.NET开发人员,并遵循他们针对Minipa的开发思路。异常发生在控制器返回以显示视图和视图实例化之间的某个位置。该视图使用强类型模型类而不是字符串,但不知何故,它仍然需要一个字符串,就像目前为止所有代码中的情况一样。在课程示例中,该模型未在视图中引用,仅显示了指向引用该模型的其他视图的链接。我使用相同的模型类创建了一个更简单的项目。为我解决了一个类似的问题。MVC5样板代码在布局文件中添加了一个不必要的模型声明。我一删除它,我的页面就运行得很好。我收到的错误消息
    @model Angular4DotNetMvc.Models.Registration.RegistrationVm
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>