【问题标题】:Two jQuery 'identical' autocomplete textboxes but only one works两个 jQuery '相同' 自动完成文本框,但只有一个有效
【发布时间】:2009-12-24 08:37:39
【问题描述】:

我在一个 mvc 网页上有两个 jQuery 自动完成文本框。一个返回问题列表,另一个返回标签列表。

问题文本框完美运行,但标签文本框仅向其控制器发送空字符串。

jQuery javascript 与 Url.Action 完全匹配,无效的显示如下:

<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>

标签控制器被调用并正确返回 Json 数据,因为我已将“b”字符串参数硬编码到 LookUpTag 方法以确保,但自动完成的字符串 t 参数始终为空。

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

这有什么合乎逻辑的原因吗?

【问题讨论】:

  • 我会做两件事:1) 使用 firebug 或 Fiddler 检查请求的 URL 是否正是我所期望的。 2) 确保您的 MVC 路由正确地通过参数...

标签: jquery asp.net-mvc autocomplete


【解决方案1】:

我唯一能看到的是,您在操作中的参数名为t。如果您使用的是this autocomplete plugin,那么看起来搜索值将作为名为@9​​87654323@ 的查询字符串参数发送(即它将请求诸如.../Tags/AutoComplete?q=b 之类的url)。然后,MVC 将尝试将该查询字符串参数与您的操作上的一个参数相匹配,该参数也称为q

所以它可能就像将您的操作签名更改为一样简单的修复:

public ActionResult AutoComplete(string q)

【讨论】:

  • 绝对正确,因为问题控制器包含 public ActionResult AutoComplete(string q) { IQueryable searchResults = questionRepository.LookUpQuestion(q); var data = (from searchResult in searchResults select new { Id = searchResult.QuestionID, Name = searchResult.QuestionTitle }).ToList();返回 JSON(数据); }
【解决方案2】:
$('#searchTag')

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

【讨论】:

  • 他只显示了那个不起作用的脚本,所以我认为它的意思是通过 id 来定位一个事物(并且可能还有另一个相同的脚本也通过 id 来定位另一个字段)。
  • 好的,不知道怎么做。将代码更改为: $('.searchForTag').autocomplete('',
  • 在你的两个输入中,你只需要一个类名,而不是一个 id。所以: AND --- $('.searchForTag').autocomplete('', {...})
  • @Corey - 我认为你错过了他想要做的事情的重点。他有两个文本框,它们都需要一个不同的 自动完成 URL。您的建议将导致在两个文本框中填充相同的自动完成结果。
  • 感谢您的帮助。就是上面的 t 参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多