我跟着音乐商店的例子来学习ASP.NET MVC。我正在创建一个cookbook应用程序。
我创建了我的viewmodel,看起来像这样:
namespace CookMe_MVC.viewmodels { public class CookMeIndexviewmodel { public int NumberOfReceipes { get; set; } public List<string> ReceipeName { get; set; } } }
我的控制器看起来像这样
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); }
最后我的看法是这样的
@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>
我得到这个错误。
The model item passed into the dictionary is of type
CookMeIndexviewmodel
,but this dictionary requires a model item of typeIEnumerable<CookMeIndexviewmodel>
.
我跟着这个例子。我看不到我做错了什么。我应该返回我的viewmodel作为一个通用列表?
解决方法
在您的视图中,您正在使用@model IEnumerable< CookMe_MVC.viewmodels.CookMeIndexviewmodel>这表示View所期望的模型是CooknIndexviewmodel的类型IEnumerable。
但是在控制器中,你传递一个类型为CookMeIndexviewmodel的对象作为模型返回View(viewmodel);因此错误。
或者更改视图有@model CookMe_MVC.viewmodels.CookMeIndexviewmodel
或者传递一个IEnumerable CookMeIndexviewmodel作为模型到控制器中的视图,如下所示:
public ActionResult Index() { var meals= new List<string> { "Dinner 1","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); }