Теги <% =%> являются просто ярлыком для Response.Write. Если вы подумаете об этом, лямбда-выражение просто позволяет вам отложить выполнение кода Response.Write до соответствующего времени.
Итак, важной частью является вызов Response.Write для построения вашего списка, и когда пришло время внедрить пользовательский шаблон, я просто выполняю лямбда-код, который выполняет Response.Write для внедрения шаблона.
Вот пример кода, который поможет проиллюстрировать:
public class TableBuilder
{
private Action<int> _template;
public TableBuilder Template(Action<int> template)
{
_template = template;
return this;
}
public void Render()
{
var r = HttpContext.Current.Response;
r.Write("<table>");
for(int i=0; i<10; ++i)
{
r.Write("<tr><td>");
if(_template != null)
{
_template(i);
}
r.Write("</td></tr>");
}
r.Write("</table>");
}
}
Затем, чтобы использовать Помощника, сделайте следующее:
<body>
<div>
<% Html.TableBuilder().Template(i => { %>
<%= i %>: I'm a template
<% }).Render(); %>
</div>
</body>
Это ловкий трюк!