ASP.NET MVC视图上的JQuery自动完成

时间:2010-01-08 21:31:21

标签: jquery asp.net-mvc asp.net-ajax jquery-plugins

我的视图中有一个有效的jQuery自动完成功能(bassistance)。问题是我只是没有得到这个东西。 MVC操作返回JSON数据,插件读取很好,过滤器工作得很好 - 它列出了结果,我可以从下拉列表中选择。但是当我选择时没有任何反应 - 我选择了一个项目,无论是按Enter键还是单击它。我想我必须以某种方式连接result()函数 - 我尝试使用onItemSelect选项,但它不起作用,没有任何反应,result()不会触发。

最后,我想要的是能够连续添加用户选择的项目或列表。

我认为我的大多数问题都来自缺乏jQuery或JavaScript知识,我承认我从来不喜欢但现在使用ASP.NET MVC我被迫学习它,事实上我发现它非常有用能够绕过回发..

到目前为止,这是我的代码:

<script type="text/javascript">

$(document).ready(function() {
    $("#Products").focus().autocomplete('<%=Url.Action("GetProducts", "Product") %>', {
        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].product_id, result:data[i].product_name1};
            }
            return rows;
        },

        formatItem: function(row, i, n) {
            return row.product_PrettyId + ' - ' + row.product_name1 + ' (' + row.product_price + ' €) ';
        },      
        width: 900,
        minChars: 0,
        max: 0,
        mustMatch: true,
        onItemSelect: result,
    });
});

function result(extra) {
    $("#result").val(extra);
}   

</script>

查看:

<div>
    <%=Html.TextBox("Products", null, new { style = "font-size: 20px; width: 900px"}) %>
</div>
<div id="result"></div>

另请注意,我的解决方案需要启用和禁用JavaScript,因此在我的最终解决方案中,我还想提供一个按钮控件,它会对我的控制器操作执行回发和经典发布,以便将项目添加到列表中

2 个答案:

答案 0 :(得分:1)

母马,看这里: http://groups.google.com/group/jquery-en/browse_thread/thread/822a07c9d7d49d35

问题是自动完成建议你的数据总是一个字符串,但在你的情况下它不是真的 - 你正在使用json。

使用非压缩的autocomplete.js并添加“s = s.toString();”就在脚本失败的行之前。

答案 1 :(得分:0)

我相信你唯一需要改变的是你的结果方法。

function result(extra) {
    $("#result").append(extra.selectValue);
}

您选择的项目(额外)在内部存储为<li>。因此,您需要获取selectValue,而不是val()。我在过去的六个月里一直在与JavaScript,JQuery和MVC搏斗,所以我感到很痛苦。