Я создал простой html помощник Gallery, на данный момент он не очень хорош, так как я не могу заставить его работать с Razor. (Мне бы хотелось использовать Action, как я сделал бы с webforms viewengine)
public static HelperResult Gallery<T>(this HtmlHelper html,
IEnumerable<T> items,
int itemsPerRow,
Action rowContainer,
Func<T, HelperResult> itemContainer,
Action endRowContainer)
{
if (items == null)
return new HelperResult(writer => { });
int itemCount = 1;
return new HelperResult(writer =>
{
rowContainer();
foreach (var item in items)
{
if (itemCount % itemsPerRow == 0)
{
endRowContainer();
rowContainer();
}
itemContainer(item).WriteTo(writer);
itemCount++;
}
endRowContainer();
});
}
это предполагаемое использование, но rowContainer и endRowContainer выводятся в начало сгенерированного HTML
@Html.Gallery(
Model.Stores,
3,
()=> { Response.Write("<div class=\"portfolio_box_container\">"); },
@<div class="portfolio_box" style="padding-right: 25px">
<img src="item.png" width="120" height="43" alt="" />
</div>
,
() => { Response.Write("</div>"); })
Что я делаю не так?
если следует распечатать что-то вроде:
<div class="portfolio_box_container">
<div class="portfolio_box" style="padding-right: 25px">
<img src="item.png" width="120" height="43" alt="" />
</div>
<div class="portfolio_box" style="padding-right: 25px">
<img src="item.png" width="120" height="43" alt="" />
</div>
<div class="portfolio_box" style="padding-right: 25px">
<img src="item.png" width="120" height="43" alt="" />
</div>
</div>
<div class="portfolio_box_container">
<div class="portfolio_box" style="padding-right: 25px">
<img src="item.png" width="120" height="43" alt="" />
</div>
<div class="portfolio_box" style="padding-right: 25px">
<img src="item.png" width="120" height="43" alt="" />
</div>
<div class="portfolio_box" style="padding-right: 25px">
<img src="item.png" width="120" height="43" alt="" />
</div>
</div>