【问题标题】:MVC Strongly typed IQueryable<IGrouping<TKey, TElement>> modelMVC 强类型 IQueryable<IGrouping<TKey, TElement>> 模型
【发布时间】:2012-07-02 04:48:55
【问题描述】:

我正在尝试为我在 MVC 中的一个视图创建一个强类型模型。该模型是 LINQ GroupBy 查询的结果,因此它是如下所示的类型(按姓氏的第一个字母对员工进行分组)。

@model IQueryable<IGrouping<string, Employee>>

我不确定为什么,但它不允许我拥有这种类型的模型。我得到的错误信息是: 开头的“”。这是不正确的。

我知道我可以创建一个特定于视图的模型并填充它,但我想知道为什么这个模型似乎不起作用?

【问题讨论】:

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


    【解决方案1】:

    默认情况下,可在剃刀视图中直接使用的命名空间非常有限。尝试将其扩展为完全限定名称,看看问题是否仍然存在:

    @model System.Linq.IQueryable<System.Linq.IGrouping<string, Name.Space.Employee>>
    

    【讨论】:

    • 试一试,但这似乎不是问题。当视图的顶行作为该语句时,它会破坏页面其余部分的 itellisense,就好像它在语法上不正确一样,尽管我 100% 确定它是正确的,因为我从返回模型的控制器代码中复制了它。
    【解决方案2】:

    我不知道您为什么会收到此错误,因为您似乎使用了正确的 Razor 代码。可能实际上页面中的其他地方存在一个错误,该错误通过此不正确的错误消息显示出来。

    一种可以帮助您确定错误真正来源的解决方法是创建您自己的强类型模型类,该类可以将此数据作为其属性:

    public class EmployeeListViewModel
    {
        public IQueryable<IGrouping<string, Employee>> EmployeesByCompanyTitle {get;set;}
    }
    

    (有些人会认为这是一种更好的方法,因为您现在可以更轻松地向视图模型添加信息。)

    【讨论】:

    • 页面的其余部分没有错误,并且页面的 itellisense 仅在使用此顶部 @model 行时才停止工作(好像该行在语法上不正确),因此几乎缩小了范围到那个。可能是因为 Iqueryable 采用泛型而 igrouping 也采用泛型,所以出于什么原因不能将其用作强类型模型?看起来我可能需要创建一个特定的视图模型。
    • @robasaurus:嵌套泛型应该没有问题。我在我的机器上试了一下,效果很好。 Visual Studio 是否可能没有将其识别为 Razor 视图?尝试创建一个特定的视图模型,看看是否可行。您遇到的错误,以及听起来您页面的其余部分当前不依赖模型的事实,让我认为 VS 可能只是将您的内容视为常规 html 或 aspx/ascx 页面,而不是Razor (.cshtml) 页面。
    • 我已经创建了一个视图模型并且工作正常。所以它肯定将页面视为剃刀视图,因为我使用剃刀语法循环自定义视图模型。这很好,但我仍然对它为什么不起作用感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多