代码之家  ›  专栏  ›  技术社区  ›  mare

jquery在ASP.NET MVC视图上自动完成

  •  0
  • mare  · 技术社区  · 15 年前

    我有一个正在运行的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 回复  |  直到 14 年前
        1
  •  0
  •   Neil T.    15 年前

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

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

    您选择的项(额外)在内部存储为 <li> .因此,您需要获取selectValue,而不是val()。在过去的六个月里,我一直在和javascript、jquery和mvc搏斗,所以我感觉到了你的痛苦。

        2
  •  1
  •   thefish    14 年前

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

    问题是autocomplete建议您的数据总是一个字符串,但在您的情况下,这不是真的——您使用的是JSON。

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