【发布时间】:2010-02-05 21:26:28
【问题描述】:
我遇到了一个复杂的自动完成问题。这是用于我正在开发的网站的消息传递系统。我希望它在您输入用户名的地方工作,它会返回他们的图像、他们的名字和他们的 ID 的拇指。然后,当您选择它时,我希望它显示用户名,但是当它回发时我希望它发回他们的 ID(因为用户名不是唯一的)。
我从http://blog.schuager.com/2008/09/jquery-autocomplete-json-apsnet-mvc.html 开始作为一种方法。但是,我使用 Stackoverflow 中的 tageditor.js 作为扩展器,只是因为我喜欢它的工作原理。
标签编辑器链接如下。我认为这是一个旧版本。
我们使用的是 MVC 1.0。这是我的代码:
public ActionResult Recipients(string prefix, int limit)
{
IList<UserProfile> profiles = profileRepository.GetUsers(prefix, limit);
var result = from p in profiles
select new
{
p.ProfileId,
p.FullName,
ImageUrl = GetImageUrl(p)
};
return Json(result);
}
这是页面上的脚本
<script type="text/javascript">
$(document).ready( function() {
$('#recipients').autocomplete('<%=Url.Action("Recipients", "Filter") %>', {
dataType: 'json',
parse: function(data) {
var rows = new Array();
for(var i=0; i < data.length; i++) {
rows[i] = { data: data[i], value: data[i].ProfileId, result: data[i].FullName };
}
return rows;
},
formatItem: function(row, i, n) {
return '<table><tr><td valign="top"><img src="' + row.ImageUrl + '" /></td><td valign="top">' + row.FullName + '</td></tr></table>';
},
max: 20,
highlightItem: true,
multiple: true,
multipleSeparator: ";",
matchContains: true,
scroll: true,
scrollHeight: 300
});
});
</script>
所以,回调起作用了,我的列表显示图像和用户名,当我选择一个时,它将用户的全名放在带有分隔符的文本框中。但是,当我提交表单时,只会发回姓名,而不会发回个人资料 ID。关于如何在不显示在文本框中的情况下获取 ID 的任何想法?
编辑: 这是我正在使用的 tageditor.js 版本http://www.gotroleplay.com/scripts/tageditor.js
【问题讨论】:
标签: jquery asp.net-mvc model-view-controller jquery-plugins autocomplete