【问题标题】:The model item is of type CookMeIndexViewModel, but requires a model item of type IEnumerable<CookMeIndexViewModel>模型项的类型为 CookMeIndexViewModel,但需要类型为 IEnumerable<CookMeIndexViewModel> 的模型项
【发布时间】:2023-03-25 17:45:01
【问题描述】:

我正在跟随音乐商店示例来尝试学习 ASP.NET MVC。我正在创建一个食谱应用程序。

我创建了如下所示的视图模型:

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&lt;CookMeIndexViewModel&gt; 类型的模型项。

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

【问题讨论】:

    标签: asp.net asp.net-mvc-3 asp.net-mvc-viewmodel


    【解决方案1】:

    在您的视图中,您使用的是@model IEnumerable&lt;CookMe_MVC.ViewModels.CookMeIndexViewModel&gt;,这表明视图预期的模型是 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);
    }
    

    【讨论】:

    • 感谢cybernate。抱歉,在这种情况下,我将如何创建 Ienurmerables?
    • 在我的情况下,我忘记为视图模型中的模型分配一个值。发生了同样的错误-但是这个答案使我朝着正确的方向前进。谢谢+1
    • @Chandu:我也有同样的错误。但我正在尝试渲染部分视图。 This 是问题的链接。我猜我正确地将值从控制器传递给视图。但从部分视图来看,它会引发错误。你能帮忙吗?
    • @ViniVasundharan 请查看 Greg 的回答,了解您的原始问题。它应该可以帮助您解决问题。
    • @chandu 。当然。我会查一下。感谢您的宝贵时间。
    【解决方案2】:

    当我在 _Layout.cshtml 布局视图中的 @model 指令与“内页”视图之间存在冲突时收到此消息。

    _Layout.cshtml 有指令..

    @model MyProject.Models.MyObject
    

    我的内页有...

    @model IEnumerable<MyProject.Models.MyObject>
    

    我正在编写一些测试/实验代码,并在创建新控制器等时遇到了这个问题。只有当我重命名模型对象并随后编译时,我才找到问题的根源。

    希望这会有所帮助。

    问。

    【讨论】:

    • 也为我工作。谢谢!
    【解决方案3】:

    在剑道 ui Grid 中做:

    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; }
        }
    

    在 Shared/EditorTemplate 文件夹中的 Integer.ascx 中:

    <%@ 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)
    %>
    

    【讨论】:

      猜你喜欢
      • 2020-10-20
      • 2017-11-26
      • 2019-09-10
      • 2011-09-06
      • 2023-03-30
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多