2012-01-04 133 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

相关问题