Nir*_*Nir 8 asp.net-mvc partial-views ado.net-entity-data-model razor
我希望构建一个获取模型列并打印它的局部视图.像这样的东西:
在视图中:
@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)
Run Code Online (Sandbox Code Playgroud)
在局部视图:
<table>
<tr>
<th>
Brand
</th>
</tr>
@foreach (var row in Model)
{
<tr>
<td>
@Html.DisplayFor(r => row)
</td>
</tr>
}
</table>
Run Code Online (Sandbox Code Playgroud)
我遇到了一些问题:
谢谢!
编辑:
为了清除一件事,我希望视图将为表中的每一列调用相同的局部视图(无论如何,对于表中的大多数列),每次我将发送一个不同的列(不同的值列为精确).
Dar*_*rov 11
首先重构并将正确的逻辑放在正确的位置.此LINQ查询在视图中严格无关.视图不应该执行任何LINQ查询或任何提取数据.视图应该使用以视图模型的形式从控制器操作传递给它的数据.控制器操作构建并传递您为视图定义的自适应视图模型.
因此,您始终要定义一个适合您视图要求的视图模型:
public class MyViewModel
{
public IEnumerable<Brand> Brands { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你编写一个控制器动作来填充这个视图模型并将其传递给视图:
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);
}
Run Code Online (Sandbox Code Playgroud)
那么一个观点:
@model MyViewModel
<table>
<tr>
<th>
Brand
</th>
</tr>
@Html.DisplayFor(x => x.Brands)
</table>
Run Code Online (Sandbox Code Playgroud)
最后,您可以定义一个相应的显示模板,该模板将自动为Brands
视图模型(~/Views/Shared/DisplayTemplates/Brand.cshtml
)的集合的每个元素呈现:
@model Brand
<tr>
<td>
@Html.DisplayForModel()
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
对于1尝试改变@Html.RenderPartial("_DisplayAttribute",Brand)
,以@Html.Partial("_DisplayAttribute",Brand)
您还需要在局部视图中指定模型@model products_comparison.Models.Brand
或类似的模型
另外请澄清2和3,因为他们不清楚你想要什么
归档时间: |
|
查看次数: |
23789 次 |
最近记录: |