我已经为 ASP.NET MVC 4 编写了一个分页转发器。它有一个渲染方法,它接受页眉、页脚、正文和分隔符部分的参数来渲染,就像这样(为了便于阅读而简化了很多):
public IHtmlString Render(Func<TViewModel, object> header, Func<TViewModel, object> body, Func<TViewModel, object> footer)
{
var sb = new StringBuilder();
// Code to render including calling the parameter objects, something like this:
sb.Append(header(null));
foreach (var item in items)
sb.Append(body(item));
sb.Append(footer(null));
return new HtmlString(sb.ToString());
}
现在,我想在 Razor 模板中使用此方法,并包含实际模板部分作为参数。这对于像这样的场景非常有用,我要么只使用纯 lambda 表达式,要么使用 oneliner 作为模板:
@Model.Render(body:
item => Html.Partial("InvoiceListView", item)
, separator:
@<hr />
)
但是,如果我想做一些更复杂的事情,比如构建一个表格并填充它,我就是无法让 Razor 意识到我想将这些多行模板作为参数发送。
我想也许这会起作用:
@Model.Render(body: item =>
@<text>
<tr>
<td>
@item.ArticleNr
</td>
</tr>
</text>
);
但那里没有运气。有人有什么建议吗?还是我运气不好 - 在 Razor 中写这样的中继器是不可能的吗?