2011-01-27 73 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) 
%> 
相關問題