这是我的模型电影
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 视图的表单中填充了电影数据。
问题:我需要将为countries属性这样的集合类型创建输入的逻辑封装到标记帮助器或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("");
}
}