asp.net mvc利用 ajax实现输入自动完成

新建一个asp.net mvc3项目AutoComplete.

在shared/_layout.cshtml母版页中导入实现自动完成必须的js库

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/themes/base/jquery.ui.all.css")" rel="stylesheet" type="text/css"/>
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
</head>

<body>
    @RenderBody()
</body>
</html>

Model中新建一个Singer类

    public class Singer
    {
        public int SingerId { get; set; }

        public string SingerName { get; set; }
    }

项目----添加ASP.NET文件夹----App_Data

在web.config中添加连接字符串

<connectionStrings>
    <add name="AutoDbEntities" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=AutoComplete;Persist Security Info=True;User ID=sa;Password=XXX" providerName="System.Data.SqlClient" />
</connectionStrings>

Model中新建一个继承DbContext的类AutoDbEntities.cs

    public class AutoDbEntities : DbContext
    {
        public DbSet<Singer> Singers { get; set; }
    }

Model中新建一个继承 :DropCreateDatabaseIfModelChanges<AutoDbEntities>实现播种数据的类InitData.cs

    public class InitData : DropCreateDatabaseIfModelChanges<AutoDbEntities>
    {
        protected override void Seed(AutoDbEntities context)
        {
            context.Singers.Add(new Singer { SingerName = "周杰伦"});
            context.Singers.Add(new Singer { SingerName = "周笔畅"});
            context.Singers.Add(new Singer { SingerName = "周华健"});

            context.Singers.Add(new Singer { SingerName = "12"});
            context.Singers.Add(new Singer { SingerName = "123"});
            context.Singers.Add(new Singer { SingerName = "1234"});

            base.Seed(context);
        }
    }

修改Global.asax文件,设置播种数据库

        protected void Application_Start()
        {
            System.Data.Entity.Database.SetInitializer(new AutoComplete.Models.InitData()); //若数据库不存在,则初始化数据
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }

在Controllers中新建一个HomeControlle

添加Index()方法,用于显示视图,

添加QuickSearch()方法,用于实现异步查询,返回JSON数据给视图,在搜索框上显示

    public class HomeController : Controller
    {
        AutoDbEntities db = new AutoDbEntities();

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult QuickSearch(string term)
        {
            var singers = GetSingers(term).Select(a => new { value = a.SingerName });
            return Json(singers, JsonRequestBehavior.AllowGet);
        }

        private List<Singer> GetSingers(string searchString)
        {
            return db.Singers.Where(a => a.SingerName.Contains(searchString)).ToList();
        }

    }

为HomeController的index()方法,添加视图

在index.cshtml视图中添加一个搜索框,并添加data-autocomplete-source属性,在dom的ready事件中对该属性进行处理

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@{
    //在ready事件中对data-autocomplete-source属性的元素进行处理
    <script type="text/javascript">
        $(document).ready(function () {
            $("input[data-autocomplete-source]").each(function () {
                var target = $(this);
                target.autocomplete({ source:
                target.attr("data-autocomplete-source")
                });
            });
        });
    </script>
}

<div>
    @*为搜索框添加一个data-autocomplete-source属性,并设置异步查询数据的控制器和方法*@
    <input type="text" name="q" data-autocomplete-source = "@Url.Action("QuickSearch", "Home")"/>
    <input type="submit" value="搜索"/>
</div>


运行程序,效果如下

                                   


                    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值