.net MVC中使用jquery ui 的autocomplete

 http://jqueryui.com/autocomplete/#default 这是例子

下载了这个jquery-ui-1.12.1.custom

项目中需要加载  

 

首先说没有使用json的情况,
这种情况就非常简单,

本地数据源

<p>  @Html.TextBox("tags")  </p>

 $(function () {
        var availableTags = [
                  "黄1",
                  "黄2",
                  "黄3",
                  "BASIC",
                  "C",
                  "C++",
                  "Clojure",
                  "COBOL",
                  "ColdFusion",
                  "Erlang",
                  "Fortran",
                  "Groovy",
                  "Haskell",
                  "Java",
                  "JavaScript",
                  "Lisp",
                  "Perl",
                  "PHP",
                  "Python",
                  "Ruby",
                  "Scala",
                  "Scheme"
            ];
            
        $("#Text1").autocomplete({
            source: availableTags
        }); 
    })
    

 </script>

上面的例子就是最简单的  ,
 autocomplete 里面的 source 设置为一个数组就可以了
 
 当然,实际开发中,这个数组的来源一般是后台代码访问数据库所得到的,
 并且以json的格式传过来

<div class="form-group">
            <label for="Vin" class="col-sm-6 control-label">VIN号</label>
            <div class="col-sm-6">
                <input type="text" class="form-control" id="Vin" name="Vin" placeholder="请输入VIN号">
            </div>
        </div>

        <div class="form-group">
            <label for="Vmodel" class="col-sm-6 control-label">车辆型号</label>
            <div class="col-sm-6">
                <input type="text" class="form-control" id="Vmodel" name="Vmodel" placeholder="请输入车辆型号">
            </div>
        </div>

        <div class="form-group">
            <label for="CustomerName" class="col-sm-6 control-label">客户名称</label>
            <div class="col-sm-6">
                <input type="text" class="form-control" id="CustomerName" name="CustomerName" placeholder="请输入客户名称">
            </div>
        </div>

        <div class="form-group">
            <label for="DepartDate" class="col-sm-6 control-label">发车日期</label>
            <div class="col-sm-6">
                <input type="text" class="form-control" id="DepartDate" name="DepartDate" placeholder="请输入发车日期">
            </div>
        </div>

js如下

$(function () {
        $("#Vin").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "/Home/VinJson",
                    type: "POST",
                    dataType: "json",
                    data: { Vin: request.term },
                    success: function (data) {
                        response($.map(data, function (item) {
                            return {
                                label: item.Vin,
                                value: item.VehicleModel,
                                DeliveryDate: item.DeliveryDate,
                                CustomerName: item.CustomerName

                            }
                        }
                            ));
                    } //end  success
                }); //end ajax
            }, //end  source
            focus: function (event, ui) {
                
                $("#Vmodel").val(ui.item.value);
                $("#CustomerName").val(ui.item.CustomerName);
                $("#DepartDate").val(ui.item.DeliveryDate);
                return false;
            }, //end focus
            select: function (event, ui) {
                $("#Vin").val(ui.item.label);
                
                return false;
            }, //end  select
            minLength: 0
        }); //end autocomplete
    });

后台action

    public JsonResult VinJson(string Vin)
        {
            //List<Vinfo> VinfoList = new List<Vinfo>();

            var  VinfoList = db.sw_tb_VehicleInfo.Join(db.sw_tb_Customers, m => m.strCustomerCode, rm => rm.strCustomerCode, (m, rm) =>
                            new Vinfo
                            {
                                Vin = m.strVIN,
                                VehicleModel = m.strVehicleModel,
                                DeliveryDate = m.dtDeliveryDate,
                                CustomerName = rm.strCustomerNameCn
                               
                            }).OrderBy(sm => sm.Vin).ToList().AsEnumerable();

            VinfoList = VinfoList.Where(m => m.Vin.Contains(Vin));

            return Json(VinfoList, JsonRequestBehavior.AllowGet);
        }

这里用到的model

  public class Vinfo
    {
        public string Vin { get; set; }
        public string VehicleModel { get; set; }
        public string DeliveryDate { get; set; }
        public string CustomerName { get; set; }

    }

从上面的代码可以看到,source对应的是ajax的内容,
ajax的url就是刚才后台代码写的VinJson
而data 根据Vinfo的内容重新定义,
label对应Vin
value对应VehicleModel
DeliveryDate对应DeliveryDate

CustomerName对应CustomerName
这里要说明为什么一定要有 label 和 value这两个名字呢???
因为jquery ui 里面的 autocomplete 默认情况下:是用label进行搜索,value进行显示!
所以为了我就这样子命名了,
当然也可以按照你喜欢的规则进行搜索和显示,这里就不演示了。


然后我们分析一下:focus
focus指的是下拉框选择的时候触发的事件

当vin中输入然后选择时 

$("#Vmodel").val(ui.item.value);
$("#CustomerName").val(ui.item.CustomerName);
$("#DepartDate").val(ui.item.DeliveryDate);

这三个input显示相应的值

那么select事件指的是按回车确定的事件:
我把 label 填入了 Vin里面了


最后的minLength是最好理解的:匹配字符串的最短长度,
如果是1的话,就必须写一个字符才会有匹配的下拉框出现

原文地址:https://www.cnblogs.com/seanjack/p/6676830.html