2011-09-13 15 views
2

私はコントローラーで、次のアクションがあります。C#MVC3 - RazorでLINQの選択とforeachループ、何が欠けていますか?

public ViewResult Index() 
{   
    //select 
    var query = (from u in db.UserSets 
       join f in db.FriendRequestsSets on u.ID equals f.FriendID 
       orderby u.ID 
       select new {Id = u.ID, Nickname = u.Nickname}).AsEnumerable(); 

    ViewBag.FriendRequests = query; 
    return View(this.UserColl()); 
} 

私のかみそりビューで、次のforeach:

<ul> 
@foreach (var item in ViewBag.FriendRequests) 
{ 
    <li>@item.Nickname</li> 
} 
</ul> 

と、次のエラー:

*'object' does not contain a definition for 'Nickname'* 

私は私の中で何をしないのですコード?

+1

どこが間違っていますか? – SLaks

+0

ブラウザにページを表示しようとしたとき –

+0

コンパイラエラーか実行時エラーですか? (スタックトレースがありますか?) – SLaks

答えて

6

ViewBagはオブジェクト型であり、列挙型ではありません!あなたは何ができるか

は、次のようにクラスを持つことです。

Class User{ 
    public int Id; 
    public string Nickname; 
    } 

その後、怒鳴るようUserクラスのリストを移入:あなたのビューで

var query = (from u in db.UserSets 
      join f in db.FriendRequestsSets on u.ID equals f.FriendID 
      orderby u.ID 
      select new User{Id = u.ID, Nickname = u.Nickname}).ToList(); 

と最後では、次の操作を行います。

@foreach (var item in ViewBag.FriendRequests as List<User>) 
    { 
     <li>@item.Nickname</li> 
    } 

希望します。

+0

こんにちはCJCoax、あなたの答えに感謝します。私は、このUserクラスを見つけることができないビューの中に、コントローラ内のクラスを配置しました。ビュー内にコード行がありません。新しいエラーは、型または名前空間の名前 'User'が見つかりませんでした(使用指示文またはアセンブリ参照がありませんか?) –

+0

こんにちはRubia、あなたのコントローラの名前空間がRubiaApplication.ControllersであるとしますControllerクラス自体の内部ではなく、名前空間である)、ビューの最上部にこれを追加する必要があります:@ RubiaApplication.Controllersを使用する(Userクラスが存在する名前空間をインポートします) – CjCoax