我有以下代码块,在剃刀视图中复制和粘贴大约5次。它基本上只使用不同的数据显示同一模型的表格。
如何将其重新编写为html帮助器或lambda func,以便我可以将其重用于传递给视图的n个不同模型?
// Example for Model.A and Model.B
var cCols = new[] { "val1", "val2"};
// Display the data for A
<div class="group-property">
<div class="group-label">Title A</div>
<table class="collection-table">
<thead>
<tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr>
</thead>
<tbody>
@foreach (var item in Model.A)
{
<td>@item.val1</td>
<td>@item.val2</td>
}
</tbody>
</table>
</div>
// Display the data for B
<div class="group-property">
<div class="group-label">Title B</div>
<table class="collection-table">
<thead>
<tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr>
</thead>
<tbody>
@foreach (var item in Model.B)
{
<td>@item.val1</td>
<td>@item.val2</td>
}
</tbody>
</table>
</div>
答案 0 :(得分:2)
我不知道我是否正确,但为什么不使用@ Html.Partial?
Andrei Neagu
答案 1 :(得分:1)
我不确定你尝试了什么,但为了使它成为一个辅助功能,你只需要取出不同的部分并使它们成为函数的参数:
@helper MyHelperFunction(string title, IEnumerable<ItemClass> items)
{
var cCols = new[] { "val1", "val2"};
<div class="group-property">
<div class="group-label">@title</div>
<table class="collection-table">
<thead>
<tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr>
</thead>
<tbody>
@foreach (var item in items)
{
<td>@item.val1</td>
<td>@item.val2</td>
}
</tbody>
</table>
</div>
}
@MyHelperFunction("Title A", Model.A)
@MyHelperFunction("Title B", Model.B)