我跟随音乐store 的例子try 学习ASP.NET MVC.我正在创建一个烹饪书应用程序.

我创建的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>

我得到了这个错误.

传递到字典中的模型项的类型为CookMeIndexViewModel,但此字典需要类型为IEnumerable<CookMeIndexViewModel>的模型项.

我已经效仿了这个例子.我看不出我做错了什么.我是否应该将视图模型作为通用列表返回?

推荐答案

在您的视图中,您使用的是@model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>,这表明View期望的模型是CookMeIndexViewModel的IEnumerable类型.

但是,在控制器中,您将CookMeIndexViewModel类型的对象作为模型return View(viewModel);传递,因此会出现错误.

或者将视图更改为@model CookMe_MVC.ViewModels.CookMeIndexViewModel

或者将CookMeIndexViewModel的IEnumerable作为model传递给控制器中的view,如下所示:

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

Asp.net相关问答推荐

调用context.Users和context.Set User有什么区别?

如何在 ASP.NET 中以 'YYYY-MM-DD' 格式获取当前日期?

asp.net dropdownlist - 在 db 值之前添加空行

SqlBulkCopy 超时

System.Net.Http 版本冲突导致构建警告

如何在 FileUpload 控件中限制文件类型

如何使用三个按钮是否和取消显示确认alert ,如 MS Word 中所示

用于链接字符串中的 url 的 C# 代码

System.Linq.Dynamic 不支持 OrderByDescending("someColumn")?

.Net Standard 2.0 类库是否有通用配置文件?

如何验证文件上传的文件类型?

使用 LINQ 进行递归控制搜索

什么是实体框架中的复杂类型以及何时使用它?

您正在使用哪些身份验证和授权方案 - 为什么?

Web API 必填参数

Asp.Net Mvc - 如何在共享视图中有一个控制器

IIS 8.0 ASP.NET 和错误 500.19

为什么 Controls 集合不提供所有 IEnumerable 方法?

如何在不遍历每个循环的情况下从字典对象中获取所有键(仅键)

如何将 DataTable 转换为类 Object?