我必须通过哪种模式查看?

时间:2013-06-18 22:45:52

标签: c# asp.net-mvc-4 razor

目标

在我的视野中使用模型。

问题

我得到了以下例外:

  

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

详细

我正在使用:

  • C#.NET
  • Razor Engine
  • MVC 4
  • Visual Studio 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);
}

问题

如何解决此问题?我真的不知道从控制器到视图的模型是什么。

2 个答案:

答案 0 :(得分:2)

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

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

        });

答案 1 :(得分: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>

取决于你将它放在哪个命名空间