public class Item : IHtmlContent
{
public Func? TemplateAction { get; set; }
public Func? ContentTemplate { get; set; }
public Func PartialContent? { get; set; }
public IEnumerable Models { get; set; }
public void Write(TextWriter writer, HtmlEncoder encoder)
{
foreach(var model in this.Models)
{
var root = new HtmlString("");
var content = TemplateAction?.Invoke(model, root);
content.WriteTo(writer, encoder);
var root2 = new HtmlString("");
var content2 = ContentTemplate?.Invoke(root2);
content2.WriteTo(writer, encoder);
var content3 = PartialContent?.Invoke(model);
content3.WriteTo(writer, encoder);
}
}
}
< /code>
А вот класс Builder: < /p>
public class ItemBuilder(Item item) : IHtmlContent
{
private Item _item = item;
public ItemBUilder(IEnumerable models)
{
_item.Models = models;
return this;
}
public ItemBuilder Template(Func action)
{
_item.TemplateAction = action;
return this;
}
public ItemBuilder Content(Func action)
{
_item.ContentTemplate = action;
return this;
}
public ItemBuilder ModelContent(Func action)
{
_item.PartialContent = action;
return this;
}
public void Write(TextWriter writer, HtmlEncoder encoder)
{
_item.WriteTo(writer, encoder);
}
}
< /code>
и фабричный класс: < /p>
public static class ItemFactory
{
public static IHtmlContent ItemBuilder(this IHtmlHelper helper)
{
var item = new Item();
var builder = new ItemBuilder(item);
return builder;
}
}
< /code>
Вот забавная часть: на странице бритвы я могу заставить это работать: < /p>
@(Html.ItemBuilder()
.Models(models)
.Content(
@
Id 99999
}))
< /code>
Но я бы хотел использовать данные модели. < /p>
Я также могу заставить это работать: < /p>
@(Html.ItemBuilder()
.Models(models)
.ModelContent((m) => {
return Html.PartialAsync("_partial_name", m).GetAwaiter().GetResult();
}
))
< /code>
Но я думаю, что было бы очень круто, чтобы это сработало: < /p>
@(Html.ItemBuilder()
.Models(models)
.Template((m, c) => {
@
Id: @m.Id
}
)
Но страница бритвы сводится к красному кригливым линиям ...
Есть идеи почему?
Я пытаюсь создать повторный список с этим классом модели: < /p> [code]public class Item : IHtmlContent { public Func? TemplateAction { get; set; } public Func? ContentTemplate { get; set; } public Func PartialContent? { get; set; }
public IEnumerable Models { get; set; }
public void Write(TextWriter writer, HtmlEncoder encoder) { foreach(var model in this.Models) { var root = new HtmlString(""); var content = TemplateAction?.Invoke(model, root); content.WriteTo(writer, encoder);
var root2 = new HtmlString(""); var content2 = ContentTemplate?.Invoke(root2); content2.WriteTo(writer, encoder);
var content3 = PartialContent?.Invoke(model); content3.WriteTo(writer, encoder); } } } < /code> А вот класс Builder: < /p> public class ItemBuilder(Item item) : IHtmlContent { private Item _item = item;
public ItemBUilder(IEnumerable models) { _item.Models = models; return this; }
public void Write(TextWriter writer, HtmlEncoder encoder) { _item.WriteTo(writer, encoder); } } < /code> и фабричный класс: < /p> public static class ItemFactory { public static IHtmlContent ItemBuilder(this IHtmlHelper helper) { var item = new Item(); var builder = new ItemBuilder(item); return builder; } } < /code> Вот забавная часть: на странице бритвы я могу заставить это работать: < /p> @(Html.ItemBuilder() .Models(models) .Content( @
Id 99999
})) < /code> Но я бы хотел использовать данные модели. < /p> Я также могу заставить это работать: < /p> @(Html.ItemBuilder() .Models(models) .ModelContent((m) => { return Html.PartialAsync("_partial_name", m).GetAwaiter().GetResult(); } )) < /code> Но я думаю, что было бы очень круто, чтобы это сработало: < /p> @(Html.ItemBuilder() .Models(models) .Template((m, c) => { @
Id: @m.Id
} ) [/code] Но страница бритвы сводится к красному кригливым линиям ... Есть идеи почему?