8

モデル列を取得して印刷する部分的なビューを作成したいと考えています。そのような 何か:ビューでasp.net mvc - 部分データモデルを部分ビューに渡す

@model IEnumerable<products_comparison.Models.Product> 
@{ 
ViewBag.Title = "Index"; 

var Brand = (from r in Model 
      select r.Brand).Distinct(); 
} 
<h2> 
Index</h2> 

@Html.RenderPartial("_DisplayAttribute",Brand) 

と部分ビューで:

  1. コンパイラ:

    <table> 
        <tr> 
         <th> 
          Brand 
         </th> 
        </tr> 
        @foreach (var row in Model) 
        { 
         <tr> 
          <td> 
           @Html.DisplayFor(r => row) 
          </td> 
         </tr> 
        } 
    </table> 
    

    私はに実行するいくつかの問題があります。私はBarndを部分ビューに送ることができません。

  2. 部分表示コードを見ると、列名であるブランドという単語が表示されます。部分的な見解では「ブランド」という言葉をハードコーディングするのではなく、列名がそこにあることが好きです。
  3. 私は@モデルproducts_comparison.Models.Productを配置する必要がありますが、私は 穴のテーブルを送信したいです。私はただ一つのコラムを送りたいと思っていますが、私は何をそこに置くべきかわかりません。

ありがとう!

EDIT:

ちょうど私はビューが(とにかくテーブル内の列のほとんどの)テーブルの各列の同じ部分図を呼ぶことにしたい、一つのことをクリアすると、その都度、私はよ別の列(厳密には別の値の列)を送信します。 については

答えて

7

はあなたにも@model products_comparison.Models.Brandか何かそれのような

のような部分ビューでモデルを指定する必要があります@Html.RenderPartial("_DisplayAttribute",Brand)@Html.Partial("_DisplayAttribute",Brand)

を変更してみてください、彼らは明らかにされていないとしても2 & 3を明確にしてくださいあなたが望むもの

+0

を1へのあなたの答えは...それを固定して、私は私の質問を編集... – Nir

+0

ありがとう!あなたの答えはクールです! –

+0

@Nir通常、あなたを助けた答えを「同意する」と役に立ちます。 (ありがとう、ありがとう) –

12

正しいロジックにリファクタリングして適切なロジックを配置することから始めます。このLINQクエリは、ビュー内では何もしません。ビューは、LINQクエリなどのデータを取得するものではありません。ビューは、ビューモデルの形式でコントローラアクションから渡されたデータを処理することになっています。コントローラアクションは、ビューに対して定義した適応されたビューモデルを作成して渡します。

だから、いつものように、あなたのビューの要件に適合させることがビューモデルを定義することによって開始:

public class MyViewModel 
{ 
    public IEnumerable<Brand> Brands { get; set; } 
} 

、あなたは、このビューモデルを投入し、ビューに渡しますコントローラのアクションを書きます:

public ActionResult Foo() 
{ 
    IEnumerable<products_comparison.Models.Product> products = ... 
    var model = new MyViewModel 
    { 
     Brands = (from r in Model select r.Brand).Distinct() 
    }; 
    return View(model); 
} 

、その後ビュー:

@model MyViewModel 
<table> 
    <tr> 
     <th> 
      Brand 
     </th> 
    </tr> 
    @Html.DisplayFor(x => x.Brands) 
</table> 

、最終的にあなたCOU LD自動的にビューモデル(~/Views/Shared/DisplayTemplates/Brand.cshtml)のBrandsコレクションの各要素に対してレンダリングされる対応する表示テンプレートを定義します。

@model Brand 
<tr> 
    <td> 
     @Html.DisplayForModel() 
    </td> 
</tr> 
+0

ありがとう。あなたの答えに私の問題は、ビューのアドレスは、ブランドの列ではなく、列です。私はビューがテーブルの各列(テーブルのほとんどの列)の同じ部分的なビューを呼び出す必要があります。そのため、私はブランドだけをビューに渡しませんでした。むしろ穴のテーブルを送信します。 – Nir

+0

@nir。この場合、テーブルの列と行が含まれるようにビューモデルを調整できます。 –

+0

それでは、それはモデル自体からどうやって決まるのでしょうか? – Nir

関連する問題