2011-01-27 69 views
32

我正在跟随音乐商店示例以尝试学习ASP.NET MVC。我正在创建一个食谱应用程序。该模型项是CookMeIndexViewModel类型,但需要IEnumerable类型的一个模型项<CookMeIndexViewModel>

我创建我的视图模型,看起来像这样:

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> 

我得到这个错误。

传入字典的模型项目类型为CookMeIndexViewModel,但此字典需要IEnumerable<CookMeIndexViewModel>类型的模型项。

我遵循了这个例子。我看不到我做错了什么。我应该将我的viewmodel作为通用列表返回吗?

回答

51

在您的观点中,您正在使用@model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>,它表明View所期望的模型属于CookMeIndexViewModel的IEnumerable类型。

但是在控制器中传递CookMeIndexViewModel类型的对象作为模型return View(viewModel);因此出错。

要么改变看法有@model CookMe_MVC.ViewModels.CookMeIndexViewModel

或通过CookMeIndexViewModel的IEnumerable的作为模型来在控制器视图下面给出:

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); 
} 
+0

感谢cybernate。对不起,我没有使用Ienurmerables之前我将如何创建一个在这种情况下? – 2011-01-27 07:24:09

+0

使用示例代码更新了帖子。请注意chk – Chandu 2011-01-27 07:28:50

3

我得到这个消息时,我不得不之间的冲突是什么_Layout.cshtml布局视图中的@model指令和“内部页面”视图。

的_Layout.cshtml有指令..

@model MyProject.Models.MyObject 

我的内页有...

@model IEnumerable<MyProject.Models.MyObject> 

我工作的一些测试/实验代码,然后点击这个问题,当我创建新控制器等。只有当我重命名模型对象并在事后编译时,我发现了问题的根源。

希望这会有所帮助。

Q.

1
在剑道UI网格

做:

public class BookBean 
    { 
     [ScaffoldColumn(false)] 
     public Int32 Id { set; get; } 

     public String Title { set; get; } 

     public String Author { set; get; } 

     public String Publisher { set; get; } 

     [UIHint("Integer")] 
     public Int32 Price { set; get; } 

     [UIHint("Integer")] 
     public Int32 Instore { set; get; } 

     [UIHint("Integer")] 
     public Int32 GroupId { get; set; } 
    } 

在Integer.ascx在共享/ EditorTemplate夹做:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %> 

<%: Html.Kendo().IntegerTextBoxFor(m => m) 
     .HtmlAttributes(new { style = "width:100%" }) 
     .Min(int.MinValue) 
     .Max(int.MaxValue) 
%> 
相关问题