我希望构建一个获取模型列并打印它的局部视图。
像这样的东西:
在视图中:
@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>
我遇到了一些问题:
- 编译器不允许我将 Brand 发送到部分视图。
- 如果您查看部分视图代码,您将看到 Brand 一词,它是列名称。我不希望在部分视图中对“品牌”一词进行硬编码,相反,我喜欢列名称在那里。
- 在部分视图中,我需要放置@model products_comparison.Models.Product,但我没有
想发孔表。我只想发送一栏 - 但我不知道该放什么..
Thanks!
EDIT:
只是为了澄清一件事,我希望视图将为表中的每一列调用相同的部分视图(无论如何对于表中的大多数列),并且每次我将发送不同的列(不同的值列为精确的)。
首先重构并将正确的逻辑放入正确的位置。此 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>
最后,您可以定义一个相应的显示模板,该模板将自动为每个元素呈现Brands
您的视图模型的集合(~/Views/Shared/DisplayTemplates/Brand.cshtml
):
@model Brand
<tr>
<td>
@Html.DisplayForModel()
</td>
</tr>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)