2012-04-08 53 views
2

我试图在MVC中为其中一个视图创建强类型模型。该模型是LINQ GroupBy查询的结果,因此它是下面显示的类型(通过姓的首字母对员工进行分组)。MVC强类型IQueryable <IGrouping <TKey,TElement >> model

@model IQueryable<IGrouping<string, Employee>> 

我不确定为什么,但它不让我有这种类型的模型。我得到的错误消息是: 开头“<”缺少相应的关闭“>”。这是不正确的。

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

回答

1

我不知道为什么你会得到这个错误,因为你似乎是用正确的剃刀代码。通过这个不正确的错误信息,有可能在页面的其他地方实际存在一个错误。

一种解决方法,它可以帮助你确定错误的真正来源,是创建自己的强类型的模型类,这可能会对这些数据作为其属性:

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

(有那些谁会争辩说,这是一个更好的方法,因为你现在可以更容易地添加信息到你的视图模型。)

+0

页面的其余部分没有错误,页面的itellisense只有在使用这个顶部的@model行时才会停止工作(就好像该行在语法上是不正确的),所以它的范围很窄。难道这可能是事实:Iqueryable采用泛型,并且igrouping也采用泛型,所以出于某种原因,这不能用作强类型模型?看起来我可能不得不创建一个特定的视图模型。 – robasaurus 2012-04-08 17:48:11

+0

@robasaurus:嵌套的泛型应该没有问题。我在我的机器上试过了,它工作得很好。 Visual Studio是否可能将其视为Razor视图?尝试创建一个特定的视图模型,看看是否有效。你得到的错误,以及它听起来像你网页的其余部分目前不依赖于模型的事实,使我想到也许VS只是把你的内容当作普通的html或aspx/ascx页面来处理,而不是Razor(.cshtml)页面。 – StriplingWarrior 2012-04-08 22:45:47

+0

我已经创建了一个视图模型,并且工作正常。因此,我们将页面视为剃刀视图,因为我已经使用剃刀语法循环了自定义视图模型。这是伟大的,但我仍然困惑为什么它没有工作。 – robasaurus 2012-04-09 18:48:04

3

默认情况下,可以在剃刀视图中直接使用一组非常有限的名称空间。尝试将它扩展到完全合格的名字,看看问题是否仍然存在:

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

给了一个去,但它似乎并不是问题。当视图的第一行作为该语句时,它会打断页面其余部分的itellisense,就好像它的合成不正确一样,尽管我100%确定它是正确的,因为我从我的控制器代码中复制了它,它返回模型。 – robasaurus 2012-04-08 17:40:42

相关问题