Свободный строитель HTML, который принимает HTML -код в функцииC#

Место общения программистов C#
Ответить
Anonymous
 Свободный строитель HTML, который принимает HTML -код в функции

Сообщение Anonymous »

Я пытаюсь создать повторный список с этим классом модели: < /p>

Код: Выделить всё

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


}
)
Но страница бритвы сводится к красному кригливым линиям ...
Есть идеи почему?

Подробнее здесь: https://stackoverflow.com/questions/797 ... a-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»