Asp.net 获得;传递到字典中的模型项为“类型”;MVC5应用程序中的异常
我在这里看到了很多这样的问题,但答案似乎都指向了我在做什么。救命啊!!!以下是代码片段: 在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
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>