У меня есть модель с сущностями BlogPost и Tag.
public class Tag
{
public string Name { get; set; }
public string Slug { get; set; }
}
public class BlogPost : ITaggable
{
public BlogPost()
{
this.Tags = new List<Tag>();
}
public ICollection<Tag> Tags { get; set; }
[AllowHtml]
public string Text { get; set; }
}
В админке BlogPost теги страницы редактирования должны быть представлены одним текстовым вводом, разделенным запятой. Очень похоже на ввод тега StackOverflow.
Это означает сериализацию ICollection в строку и десерализацию обратно в коллекцию.
Я доволен связывателем моделей по умолчанию рядом с коллекцией тегов BlogPost.
Есть несколько вариантов, которые я знаю, чтобы справиться с этим:
Пользовательская модель Binder - с необходимостью переопределить все привязки BlogPost - в реальной сущности BlogPost действительно много свойств.
Создание текстового ввода, не связанного с моделью BlogPost, и получение / установка его значений с использованием параметров формы. Это требует больше ручной работы.
Что-то еще ...
Как бы вы внедрили теги для ввода в блоге?
UPDATE:
А пока я пробую это:
public List<Tag> Tags { get; set; }
public string TagsString {
get
{
var tags = Tags.Select(tg => tg.Name).ToArray();
var res = string.Join(",", tags);
return res;
}
set
{
var tags = value.Split(',');
Tags = new List<Tag>();
foreach (var tag in tags)
Tags.Add(new Tag { Name = tag });
}
}