两个jQuery'相同'的自动完成文本框,但只有一个工作

时间:2009-12-24 00:07:01

标签: jquery asp.net-mvc autocomplete

我在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);
    }

这有什么合理的理由吗?

2 个答案:

答案 0 :(得分:1)

$('#searchTag')

仅搜索ID会返回单个元素。尝试使用类名。

答案 1 :(得分:1)

我唯一能看到的是您的操作中的参数名为t。如果您使用this autocomplete plugin,则搜索值将作为名为q的查询字符串参数发送(即它将请求.../Tags/AutoComplete?q=b等网址)。然后,MVC将尝试将该查询字符串参数与您的操作上的参数q进行匹配。

因此,将操作签名更改为:

可能非常简单
public ActionResult AutoComplete(string q)