I am following along with the music store example to try learn ASP.NET MVC. I'm creating a cookbook application.
I have created my viewmodel that looks like this:
namespace CookMe_MVC.ViewModels { public class CookMeIndexViewModel { public int NumberOfReceipes { get; set; } public List<string> ReceipeName { get; set; } } }
my controller looks like this
public ActionResult Index() { var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" }; //create the view model var viewModel = new CookMeIndexViewModel { NumberOfReceipes = meals.Count(), ReceipeName = meals }; return View(viewModel); }
Finally my view looks like this
@model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel> @{ ViewBag.Title = "Index"; } <h2>Index</h2> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th></th> <th> Meals </th> </tr> @foreach (var item in Model) { <tr> <td> @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) | @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) | @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ }) </td> <td> @item.ReceipeName </td> </tr> } </table>
I get this error.
The model item passed into the dictionary is of type
CookMeIndexViewModel
, but this dictionary requires a model item of typeIEnumerable<CookMeIndexViewModel>
.
I have followed the example. I can't see what I am doing wrong. Should I be returning my viewmodel as a generic list?
- Microsoft Q&A The model item passed into the ViewDataDictionary is of type 'EntityCrudIdentity.ViewModels.MemberViewModel', but this ViewDataDictionary instance requires a model item of type 'EntityCrudIdentity.ViewModels.EditMemberViewModel'. The error is very clear.
The model item passed into the dictionary is of type 'System.Collections.Generic.List`1 [DB_Payment.Models.GetInvoice]', but this dictionary requires a model item of type 'DB_Payment.Models.GetInvoice'. C# MVC - Microsoft Q&A
The two are not interchangeable. You need to either change the @model line in you Razor code or change which object you're adding to the list. Of course, I can't tell you which one to do. … Download, Vote, Comment, Publish. Forgot your password? This email is in use. Do you need your password? Submit your solution! Read the question carefully.
In your view you are using @model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>
which indicates that the model expected by the View is of type IEnumerable of CookMeIndexViewModel.
However in the controller you are passing an object of type CookMeIndexViewModel as a model return View(viewModel);
hence the error.
Either change the view to have @model CookMe_MVC.ViewModels.CookMeIndexViewModel
or pass a IEnumerable of CookMeIndexViewModel as model to the view in controller as given below:
public ActionResult Index() { var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" }; //create the view model var viewModel = new CookMeIndexViewModel { NumberOfReceipes = meals.Count(), ReceipeName = meals }; List<CookMeIndexViewModel> viewModelList = new List<CookMeIndexViewModel>(); viewModelList.Add(viewModel); return View(viewModelList); }
I got this message when I had a conflict between what the @model directive in the _Layout.cshtml layout view and an "inner page" view.
The _Layout.cshtml had directive..
@model MyProject.Models.MyObject
My inner page had...
@model IEnumerable<MyProject.Models.MyObject>
I was working on some test / experiment code and hit this issue when I created new controller etc. It was only when I renamed Model Object and compiled afterwards that I found the source of the problem.
Hope this helps.
Q.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With