I see lots of these type of questions here, but the answers all seem to point to what I'm doing. Help!!! Here's the pieces of code:
In the MVC5 controller, RegistrationController:
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
The RegistrationVm class:
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
The View, Index.cshtml:
@model Angular4DotNetMvc.Models.Registration.RegistrationVm
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
The RegistrationVmBuilder class:
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
When invoking the URL, http:://localhost:3757/Registration
I get the following error:
The model item passed into the dictionary is of type 'Angular4DotNetMvc.Models.Registration.RegistrationVm', but this dictionary requires a model item of type 'System.String'.
Why is a System.String
expected when the view declares a RegistrationVm
and an instance of that class is passed in the controller?
Thanks.