我遇到了一个复杂的自动填充问题.这是针对我正在工作的网站的消息传递系统.我希望它可以在您输入用户名的地方使用,它会带回他们的图像,他们的名字和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的情况下获取ID的任何想法?
编辑:
这是我正在使用http://www.gotroleplay.com/scripts/tageditor.js的tageditor.js的版本
最佳答案
我知道这很la脚,但我总是(a)从结果处理程序中发布数据(不是formatResult,据我所知,它只是格式化结果以放入文本框,或者(b)将值粘贴到隐藏字段-同样来自结果处理程序-用于发布.
$('#recipients').autocomplete({options})
.result(function(event,data,formatted) {
$("#hidden_field").val( data.ProfileId );
// or just post the data from in here...
});
或者其他的东西.如果您找到更好的方法,请告诉我们…
显然,直接从自动完成“结果”中发布仅适用于非常特定的情况