如何构建像SO这样的标记系统?
我在我的asp.net mvc网站上使用一个独特的文本框来提交"标签".
首先,我试图用逗号"asp.net,c#,sql server"分割标签.它的工作原理,但如果用户忘记用逗号分隔标签,我就有问题要拆分该字符串.
"asp.net c #sql server":sql server应该是单个标签,而不是两个"sql"+"server".
此外我"不能"(他不应该关心这个...)要求用户使用" - "字符分隔标签的单词:"sql-server"
有人帮忙吗?
我可以想到一种(简单)方法,允许用户在标记中包含任何字符.该解决方案是允许用户一次只输入一个标签.你可以有一个用户输入标签的文本框(现有标签的自动完成是一个明确的优点),完成输入后按回车键或按钮,输入的标签显示在应用标签列表的文本框下方.这些应用标签必须为每个标签设置一个按钮,以便用户可以删除标签.
创建帖子时,Wordpress具有类似的标记机制,但它们允许一次输入多个标记,只需说明哪些字符分隔标记.要求分隔符并不是一件大事,但如果您不想强制使用特定分隔符,则只需要限制用户一次输入一个分隔符.
另一个想法(编辑)
我今天刚读完这篇文章:Tokenizing Control
StackOverflow与用户错误输入标签的问题完全相同,例如,如果您输入了"字符串操作"而不是"字符串操作".您刚刚将标记分隔符从空格更改为逗号.
根本问题仍然是一样的,所以解决方案也是一样的也就不足为奇了:
StackOverflow证明这个模型可以很好地工作.由于您自己指出的含糊不清,用于纠正用户错误的自动化解决方案有时会产生错误.这将使那些正确行事的人感到沮丧,只是被软件"修复"他们的标签所挫败.
要么匹配现有标签的字符串,那么你可以使用带空格的标签(假设你首先搜索更大的标签,这样你就可以在搜索'sql'之前找到'sql server'.你可以通过仅允许它来使这个更强大要使用的现有标签,并有一个单独的机制来创建新标签.这样,用户可以轻松地创建带空格的标签,因为在新标签框中输入的任何内容都将是单个标签,如'sql server 2005'.
编辑:
或者,您可以在标记中使用一些特殊语法来创建新语法:
'sql,asp.net,[NEWTAG] sql server,c#'将使用现有标签'sql','asp.net','c#'并创建一个新标签'sql server'
/编辑
或者你在空格上分开,不允许带空格的标签
在你的例子中,你如何区分'sql server'(1标签)和'sql''server'(2标签)?
如果你看SO标签是空间分隔的,所以一个标签是sql-server.
只要您在输入标签时向他们建议标签,我认为这不会是一个问题