2012-01-04 164 views
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) 

,並在局部視圖:

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

有我遇到了一些問題:

  1. 編譯器不允許我將Barnd發送給部分視圖。
  2. 如果您查看部分視圖代碼,您將看到Brand這個詞這個詞。我不想在部分視圖中對「品牌」這個詞進行硬編碼,而是喜歡列名將在那裏。
  3. 在局部視圖中,我需要放@model products_comparison.Models.Product,但我不想 想發送孔表。我想發送只有一列 - 但我不知道該放什麼..

謝謝!

編輯:

只是爲了澄清一兩件事,我想,該視圖將(反正大多數在表中的列)調用表中的每一列的相同的​​局部視圖,每次我會發送一個不同的列(準確地說,不同的值列)。

回答

7

對於嘗試改變@Html.RenderPartial("_DisplayAttribute",Brand)@Html.Partial("_DisplayAttribute",Brand)

您還需要指定在局部視圖模型像@model products_comparison.Models.Brand或類似的東西

還請澄清2 & 3,因爲它們不明確你想要什麼

+0

你的答案1固定它。而我編輯我的問題.. – Nir 2012-01-04 10:25:36

+0

謝謝!你的答案很酷! – 2013-02-26 22:38:12

+0

@Nir如果你'接受'幫助你的答案通常很有幫助。 (請和謝謝。) – 2017-06-27 15:40:17

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> 

最後你湊LD定義將自動被渲染爲Brands收集您的視圖模型中的每個元素(~/Views/Shared/DisplayTemplates/Brand.cshtml)對應的顯示模板:

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

謝謝。我的問題與你的答案是品牌列的視圖地址,而不是列。我希望該視圖將調用表中的每個列的相同部分視圖(對於表中的大多數列)。正因爲如此,我並沒有只將品牌傳遞給視圖,而是發送了洞表。 – Nir 2012-01-04 10:18:42

+0

@nir,在這種情況下,您可以調整視圖模型,使其包含表格的行和列。 – 2012-01-04 10:20:56

+0

那麼它是如何脫離模型本身? – Nir 2012-01-04 10:27:50

相關問題