2017-01-14 2 views
0

私はasp.netコアエンティティフレームワークを使用しています。私は自分のクエリの結果を自分のhtmlに印刷しようとしています。ここに私のコードです。私のlinqクエリの出力をHTMLで表示

これは、ここに私の.csファイル

ViewBag.User_Has_Products = (from user_products in _context.Users_Has_Products 
          join user in _context.Users on user_products.users_id equals user.id 
          join product in _context.Products on user_products.products_id equals product.id 
          select new { name = user.name, product = product.name, 
              quantity = user_products.quanitity, date = user_products.created_at}); 

foreach(var item in ViewBag.User_Has_Products) 
{ 
    System.Console.WriteLine($"{item.name}"); //this output is correct 
} 

である私も<p>@item.name</p>を試してみましたが、名前のエラーの定義が含まれていないオブジェクトを持っ

@{ 
    if(ViewBag.User_Has_Products != null) 
    { 
     foreach(var item in ViewBag.User_Has_Products) 
     { 
      <p>@$"{item.name}"</p> //trying to print it out here 
     } 
    } 
} 

.cshtmlページです。

+0

。プロジェクトのDALセクションでクエリを実行します。クエリは、データベースへの呼び出し(またはこれまでの場所)を呼び出して、コンテナにデータを格納します。例ProductクラスまたはCategoryを持つUserクラス。 – Edward

+0

ビューに必要なすべてのプロパティを持つViewModelクラスを作成できます。次に、匿名オブジェクトリストの代わりにViewModelオブジェクトのリストとして選択を投影します。 – Ankit

答えて

1

次の例を参照してください、であるとして、それを使用し、あなたの.cshtmlファイル内の文字列の引用符は必要ありません。

@{ 
    if(ViewBag.User_Has_Products != null) 
    { 
     foreach(var item in ViewBag.User_Has_Products) 
     { 
      <p>@item.name</p> 
     } 
    } 
} 

しかし、より良い勧告はmodelを構築し、自分のviewにそれを送信することです、このような:

public class UserProductsViewmodel() { 
    public string Name { get; set; } 
    public string Product { get; set; } 
    public int Quantity { get; set; } 
    public string Date { get; set;} 
} 

と、このようなあなたの.csファイルでそれを使用します。

ViewBag.User_Has_Products = (from user_products in _context.Users_Has_Products 
          join user in _context.Users on user_products.users_id equals user.id 
          join product in _context.Products on user_products.products_id equals product.id 
          select new UserProductsViewmodel() { 
            Name = user.name, Product = product.name, 
            Quantity = user_products.quanitity, Date = user_products.created_at 
           }); 
このような

そして、あなたの.cshtml中:

@{ 
    if(ViewBag.User_Has_Products != null) 
    { 
     foreach(UserProductsViewmodel item in ViewBag.User_Has_Products) 
     { 
      <p>@item.Name</p> 
     } 
    } 
} 
+0

私はそれを試みましたが、オブジェクトを取得するときに名前エラーの定義が含まれていません – Aaron

+0

'名前のないオブジェクトを使用するのではなく、名前、製品、数量などのすべてのプロパティを含むモデルを作成してみましょう。後者のエラーを修正するのに役立ちます。 –

+0

私に例を教えてもらえますか?私は本当にあなたが何であるかは分かりません。 – Aaron

0

ViewBagを使用するよりもその意志良い方法Dependency injection into viewsでこの記事をチェックしてください。

コントローラのアクションスニペ​​ット

public IActionResult GetProducts() 
{ 

    var products = (from user_products in _context.Users_Has_Products 
         join user in _context.Users on user_products.users_id equals user.id 
         join product in _context.Products on user_products.products_id equals product.id 
         select new UserProductsViewmodel() { 
           Name = user.name, Product = product.name, 
           Quantity = user_products.quanitity, Date = user_products.created_at 
          }); 
    return View(products); 
} 

ビュースニペット(.cshtml)Tha'erがモデルまたはクラスを作成し、彼の答えで述べたように

@model IEnumerable<namespace.ProductModel> 
... 

@foreach (var item in Model) 
{ 
    <p>@item.Bar</p> 
} 

のViewModel

public class ProductModel() { 
    public string Name { get; set; } 
    public string Product { get; set; } 
    public int Quantity { get; set; } 
    public string Date { get; set;} 
} 
関連する問題