我在ASP.net MVC 2中创建了一个自动填充字段。问题是输入字段只是旋转而没有自动填充数据或“无结果”消息出现。
我有一个Search控制器,它使用LIKE语句从数据库中检索LastNames。该控制器从以下JavaScript函数调用:
$('#author').autocomplete('~/edit/search.mvc', {
delay: 200,
minChars: 2
});
一切正常。我可以调试到搜索控制器,它正在传递搜索文本(q)并将结果一直提取到return语句。控制器在下面。
//Method to return author searches
public JsonResult Search(string q)
{
var locateFacultyDto = new LocateFacultyMemberDto() { SearchText = q };
var result = _facultyMemberModel.LocateFacilityMembersByLastNameLike(locateFacultyDto, 10);
var lastNames = new List<string>();
foreach (var facultyMember in result.FacultyMembers)
{
lastNames.Add(facultyMember.LastName);
}
return Json(lastNames, JsonRequestBehavior.AllowGet);
}
但是在HTML(Spark)页面中没有显示任何结果。我有一个非常简单的文本输入:
<input id="author" type="text" />
有什么想法吗?我无法进行任何比搜索控制器结束更多的调试,但到目前为止一切似乎都很好。
答案 0 :(得分:1)
我建议在firefox中使用firebug看看回来的实际响应是什么。
答案 1 :(得分:1)
好的,我想通过以下帖子和上面的评论来解决这个问题:
http://blogs.msdn.com/b/joecar/archive/2009/01/08/autocomplete-with-asp-net-mvc-and-jquery.aspx
发布生成的代码,以防其他人帮助。
Javascript :这会调用“编辑”控制器中的“搜索”方法(详情如下)。添加“Parse”函数是关键,我在上面提供的链接中对此进行了解释:
技巧是将此数据转换为自动完成功能所期望的格式。如果您使用的是本地数据,则自动完成需要一个字符串数组。由于我们的数据是JSON对象的形式,我们将使用parse选项将我们的JSON对象格式化为自动完成功能可以使用的数据。
解析函数没有很好地记录,但它基本上将采用我们的JSON对象并返回一个由三个必需部分组成的对象数组:
数据:这是我的JSON对象中的整个项目:{“ID”:13,“Name”:“test3”,“Count”:1}
值:这是我想要显示的值:test3
- 醇>
结果:在我从下拉列表中选择标记后,这是我想要添加到输入的值(txtStoryTags):test3
完整的Javascript功能:
$('#author').autocomplete('~/edit/search.mvc', {
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].Name, result: data[i].Id };
}
return rows;
},
formatItem: function(row) {
return row.Name;
},
delay: 40,
autofill: true,
selectFirst: false,
highlight: false,
minChars: 2
});
ASP.net MVC 2控制器:
//Method to return author search results as JSON
public JsonResult Search(string q) //autocomplete passes a variable 'q' containing the search text
{
var locateFacultyDto = new LocateFacultyMemberDto() { SearchText = q };
var authors = _facultyMemberModel.LocateFacilityMembersByLastNameLike(locateFacultyDto, 10);
var results = new List<Object>(); //All we need is the name and ID
//anonymnous object for JSON result.
foreach (var author in authors.FacultyMembers)
{
results.Add(new
{
Name = (author.LastName + ", " + author.FirstNames),
Id = author.Id
});
}
中提琴!自动填充功能会在搜索结果中列出用户名,并在选择名称时将ID插入到字段中,这只是:
<input id="author" type="text" />
谢谢大家!