Генерация входных данных для списка объектов с использованием тегов помощника или помощников HTML

Вот моя модель кино

class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public List<Country> Countries { get; set; }
    public List<Actor> Cast { get; set; }
    public List<Genre> Genres { get; set; }
}

И это модель страны

public class Country
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Я отправляю запрос в некоторый Api и заполняю объект фильма, а затем отправляю его непосредственно в представление CreateMovie. Представление CreateMovie имеет форму, заполненную данными фильма.

Проблема: мне нужно заключить логику создания входных данных для типов коллекций, таких как свойство стран, в помощник по тегам или помощник по HTML.

Как я могу превратить этот код в помощник по тегам или HTML-помощник?

@if(Model.Countries != null && Model.Countries.Any())
{
    for (var index = 0; index < Model.Countries.Count; index++)
    {
        <div>
            <label asp-for="@Model.Countries[index].Name"></label>
            <input asp-for="@Model.Countries[index].Name"/>
        </div>
    }
}

Прямо сейчас я использую этот код для инкапсуляции логики в HTML-помощник

public static class HtmlHelperExtensions
{
    public static IHtmlContent EditorFor<T>(this IHtmlHelper htmlHelper, List<T> source, string listName, string listItemProperty)

    {
        if (source != null && source.Any())
        {
            var property = typeof(T).GetProperties().Single(p => p.Name == listItemProperty);
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < source.Count; i++)
            {
                var content =
                    $"<input name=\"{listName}[{i}].{listItemProperty}\" value=\"{property.GetValue(source[i])}\" type=\"text\" />";

                result.Append(content);
            }

            return new HtmlString(result.ToString());
        }
        return new HtmlString("");
    }
}

0 ответов

Другие вопросы по тегам