2

目标

在我看来使用模型。

问题

我收到以下异常:

传入字典的模型项的类型为“System.Linq.Enumerable+WhereSelectListIterator 2[MyApp.Models.Data.bm_product_categories,<>f__AnonymousType31[System.String]]”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[MyApp.Models”的模型项.Data.bm_product_categories]'。

细节

我在用着:

  • C#.Net
  • 剃刀引擎
  • MVC 4
  • 视觉工作室 2012

我的部分观点(_CategoriesList):

@model IEnumerable<BluMercados.Models.Data.bm_product_categories>

<h1>Testing</h1>

我的控制器(CategoriesController)和他的方法:

public ActionResult Render()
{
    var sluggifiedProjection =
        db.bm_product_categories
        .ToList()
        .Select(category => new
        {
            CategoryNameSlugged = category.Category_Name.GenerateSlug()
        });

    return PartialView("_CategoriesList", sluggifiedProjection);
}

问题

我该如何解决这个问题?我真的不知道我必须从控制器传递到视图的模型是什么。

4

2 回答 2

2

您将匿名类型作为模型的一部分传递。虽然您可以使用 dynamic 关键字来执行此操作,但您最好制作一个 ViewModel。

就像是

public class CategoryViewModel
{
    public WhatEverTypeThisIs NameSlugged { get; set; }
}

然后

public ActionResult Render()
{
    var sluggifiedProjection =
        db.bm_product_categories
        .ToList()
        .Select(category => new CategoryViewModel
        {
            NameSlugged = category.Category_Name.GenerateSlug()
        });

    return PartialView("_CategoriesList", sluggifiedProjection);
}

模型将类似于

 @model IEnumerable<BluMercados.ViewModels.CategoryViewModel>

取决于您将其放入的名称空间

于 2013-06-18T23:35:02.940 回答
2

该问题是由您当前在其中创建具有单个属性 CategoryNameSlugged 的​​匿名类型实例的选择引起的。您应该确保您的选择操作不会更改可枚举的类型。如果可以设置属性,这可能会奏效:

.Select(category =>
        {
            category.CategoryNameSlugged = category.Category_Name.GenerateSlug();
            return category;

        });
于 2013-06-18T22:54:10.953 回答