我在mvc网页上有两个jQuery自动完成文本框。一个返回问题列表,另一个返回标签列表。
问题文本框工作正常,但标签文本框仅向其控制器发送空字符串。
除了Url.Action之外,jQuery javascript是完全匹配的,非工作的javascript是如下所示:
<script type="text/javascript">
$(document).ready(function() {
$('#searchTag').autocomplete('<%= Url.Action("AutoComplete", "Tags") %>', {
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].Name };
}
return rows;
},
formatItem: function(row) {
return row.Name;
},
delay: 40,
autofill: true,
selectFirst: false,
highlight: false,
multiple: true,
multipleSeparator: ";"
});
});
</script>
调用Tags Controller并正确返回Json数据,因为我已将“b”字符串参数硬编码到LookUpTag方法以确保,但AutoComplete的字符串t参数始终为null。
public ActionResult AutoComplete(string t)
{
IQueryable<Tag> searchResults = tagRepository.LookUpTag("b");
var data = (from searchResult in searchResults
select new { Id = searchResult.ID, Name = searchResult.Name }).ToList();
return Json(data);
}
这有什么合理的理由吗?
答案 0 :(得分:1)
$('#searchTag')
仅搜索ID会返回单个元素。尝试使用类名。
答案 1 :(得分:1)
我唯一能看到的是您的操作中的参数名为t
。如果您使用this autocomplete plugin,则搜索值将作为名为q
的查询字符串参数发送(即它将请求.../Tags/AutoComplete?q=b
等网址)。然后,MVC将尝试将该查询字符串参数与您的操作上的参数q
进行匹配。
因此,将操作签名更改为:
可能非常简单public ActionResult AutoComplete(string q)