2012-04-08 21 views
2

MVCで私のビューのいずれかの強く型付けされたモデルを作成しようとしています。モデルはLINQ GroupByクエリの結果であるため、以下に示すタイプ(従業員を最初の姓でグループ化したもの)です。MVC厳密に型指定されたIQueryable <IGrouping <TKey、TElement >>モデル

@model IQueryable<IGrouping<string, Employee>> 

私はなぜこのタイプのモデルを持っていないのですか?私が受け取るエラーメッセージは次のとおりです: "<"のオープニングに対応する閉じる ">"がありません。どちらが間違っていますか?

ビュー固有のモデルを作成してその代わりに作成することができますが、このモデルが動作しない理由を知りたいのですが、

答えて

1

あなたはこのエラーを取得すると思いますなぜあなたは正しいカミソリコードを使用しているように見えるので、私は、知りません。この誤ったエラーメッセージによって明らかになるページの他の場所に実際にバグが存在する可能性があります。あなたはバグの本当の原因を判断するのに役立つかもしれ

この問題を回避するには、そのプロパティとして、このデータを持つことができ、独自の強く型付けされたモデルクラスを作成するには、次のようになります。

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

(ありあなたが今あなたのビューモデルに情報をより簡単に追加することができるので、これはもっと良いアプローチであると主張する人でしょう。)

+0

ページの残りの部分にエラーはなく、このトップ@モデル行が使用されている(その行が構文的に間違っているように)ときに、ページのitellisenseは機能しなくなります。 Iqueryableがジェネリックをとり、igroupingもジェネリックを取って、それが強く型のモデルとして使えない理由があるのではないかと思いますか?特定のビューモデルを作成する必要があるようです。 – robasaurus

+0

@robasaurus:ネストされたジェネリックスに問題はありません。私は自分のマシンで試してみましたが、うまく動作します。 Visual StudioがこれをRazorビューとして認識していない可能性はありますか?特定のビューモデルを作成し、それが機能するかどうかを確認してください。あなたが得ているエラー、そしてあなたのページの残りの部分のように聞こえるという事実は、現在モデルに依存していないと思うのですが、VSはちょうど正規のhtmlやaspx/ascxページRazor(.cshtml)ページ。 – StriplingWarrior

+0

私はビューモデルを作成しましたが、それは正常に動作します。だから私はカスタムビューモデルをループするためにかみそりの構文を使用しているので、それは間違いなく剃刀のビューとしてページを扱っています。それは素晴らしいですが、私はまだそれが仕事をしなかった理由について困惑しています。 – robasaurus

3

デフォルトでは、非常に限定された名前空間のセットが、かみそりビューで直接使用することができます。完全修飾名に展開しようとすると問題が解決しない場合は、以下を参照してください

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

これは問題ありません。ビューにそのステートメントとして最上位の行があると、残りのページのitellisenseが構文的に間違っているかのように壊れますが、モデルを返すコントローラコードからコピーしたので100%確信しています。 – robasaurus

関連する問題