Генерация входных данных для списка объектов с использованием тегов помощника или помощников 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("");
}
}