2012-03-19 9 views
0

私は、Controlerアクションメソッドから以下の結果を部分ビューに取得しようとしています。通常は、ページの上部でモデルと参照を使用します。しかし、私は '結果'はLINQからSQLに来て、ビュー内で参照する方法がわからないので表示するために結果を反復するために使用できるので、結果が異なると思います。LINQ to SQLクエリの結果を部分ビューに表示するにはどうすればよいですか?

 [HttpGet] 
    public PartialViewResult SelectUnits() 
    { 

     var results = (from stats in db.t_harvest  
         orderby stats.unit_number      
         select new 
         { 
          stats.unit_number, 

         }).Distinct().ToList(); 


     return PartialView(results); 
    } 

答えて

1

匿名型(IE:new { ... })です。

しかし、1つの値しか返さないため、その必要はありません。

var results = (from stats in db.t_harvest  
       orderby stats.unit_number      
       select stats.unit_number).Distinct().ToList(); 

return PartialView(results); 

したがって、unit_numberがintの場合、パーシャルビューモデルはIEnumerable<int>になります。

匿名タイプを返送する必要がある場合は、dynamicという部分ビューモデルを作成します。ただ、警告の言葉として

、(もdynamicである、とViewBagdynamicに注意してください(そのようなタイプ-Oとしてその上にプロパティにアクセスする)構文エラーはランタイムの代わりに捕捉されますので、 コンパイル時間。このような理由から私は個人的には厳密に型付けされたビューを適用することを好みます。


はあなたのビューにデータを渡すことができる3つの方法があります:

ViewData["SomeName"] = 12345; 
ViewBag.SomeName = 12345; // MVC3+ 
ViewData.Model = 12345; // Same as doing: return PartialView(12345); 
0

これは匿名オブジェクトのリストを返しますので、一つの選択肢は、(あなたがあるMVC3を使用している場合)の各ビュー内のすでにある動的オブジェクトを(ViewBag)を使用してそれらにアクセスすることである

Here is a good article on ViewBag and ViewDataここで、ViewDataはビューにこれを渡すことができる別の方法です。

これは荒く、テストされていないが、私は、これは動作するはずと信じて:

Controller.cs

ViewBag.Results = results; 
return PartialView(); 

PartialView

あなたが強く、戻りリストため、部分的に型指定されたを使用することはできません
@(foreach(var result in ViewBag.Results) 
    { 
    result.unit_number.ToString();//This line should print out the HTML 
    } 
) 
+0

このコードは動作しますが、その背後にある説明が間違っています。あなたはモデルを通して匿名型をビューに戻すことができます。違いはありません.ViewData [""]、ViewBag、またはModelを使用できます。重要なのは、ビューページ自体でモデルとして指定したタイプです。 – Timeout

+0

はい、私はそれを戻す方法の一例を挙げました。私はそれをもう少し明示します。 –

関連する問題