【发布时间】:2012-01-17 21:34:57
【问题描述】:
我有一个包含 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 的标签集合之外,我对默认模型绑定器很满意。
我知道处理它的方法很少:
自定义模型绑定器 - 需要覆盖所有 BlogPost 绑定 - 真正的 BlogPost 实体中有很多属性。
创建一个与 BlogPost 模型无关的文本输入,并使用表单参数获取/设置它的值。它也需要更多的手工工作。
别的东西....
您将如何为博客文章实现标签输入?
更新:
现在我试试这个:
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 });
}
}
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 razor model-binding