老生常谈:Asp.net MVC 3+ Jquery UI Autocomplete实现百度效果

常见的示例很多,本文只是我的工作记录。

前台页面:

@{
    ViewBag.Title = "首页";
}
@section Header
{
    <script type="text/javascript">
        $(document).ready(function () {
            $("#keyword").autocomplete({
                source:function (request, response) {
                    $.ajax({
                        url: "@Url.Action("Search", "Home")",  //要查询的Action
                        type: "POST",  //Post提交
                        dataType: "json", //json格式数据,默认是text
                        data: { keyword:request.term}, //参数,不知道为什么?请指点

                      //data: {keyword:$("#keyword").val()},同样可以
                        success: function (data) {
                            response($.map(data, function (item) {
                                return { label: item.text, value: item.value}; //将返回的jsonresult的属性赋值给autocomplete item
                            }));
                        }
                    });
                },
                focus: function(event, ui) {
                 $('#keyword').val(ui.item.label); //选中item的文本

                 return false;
                },
                select: function(event, ui) {
                     $('#keyword').val(ui.item.label);  //选中item的文本

                     $('#txtSelectValue').val(ui.item.value); //选中item的值
                     return false;
               }
            });
        });
    </script>
}
关键字:
@Html.TextBox("keyword", "")

@Html.Hidden("txtSelectValue") //智能查询选中的值

 

Action代码:

 

// GET:  /Home/Index

// POST: /Home/Search

 

public ActionResult Index()

{

     return View();

}

 

[HttpPost]

public ActionResult Search(string keyword)

{

    //根据关键字查询,返回json格式对象集合

     第一种方式:循环

     List<object> items=new List<objects>();

     var item=new {text="",value=""}

     items.Add(item);

    第二种方法:直接用linq to Entity添加

     var dataList= organService.AddDataList();//获取数据列表

     items.AddRange(dataList.Select(o => new
     {
         text= o.NAME,
         value= o.CODE.ToString()
      }));

    //---------------------------------------

     return Json(items, JsonRequestBehavior.AllowGet);

}

posted @ 2011-09-21 09:58  birchlee  阅读(1600)  评论(3编辑  收藏  举报