【ASP.Net MVC】在AspNet Mvc使用JQuery AutoComplete组件

官方文档:

    http://api.jqueryui.com/autocomplete/#entry-examples

  要使用JQuery AutoComplete组件,需要引用:

【1】.jquery.js

【2】.jquery-ui.js

【3】.jquery.ui.autocomplete.css

  然后这样使用即可:

    var submitAutoCompleted = function(event, ui) {
        var $input = $(this);
        $input.val(ui.item.label);

        .......
    };

    var createAutoCompleted = function() {
        var $input = $(this);
        var ajaxOption = {
            source: $input.attr("data-oft-ajax-autocompleted"), //告诉AutoComplete组件去哪里获取数据
            select:submitAutoCompleted                          //选择某选项后,要处理的逻辑
        };

        $input.autocomplete(ajaxOption);
    }

    $("input[data-oft-ajax-autocompleted]").each(createAutoCompleted);

  1.1 目标

      为文本框的实现自动输入提示功能。比如:

    在文本框中输入“K”,自动提示你可能要输入的所有以“K”开头的选项。

1.2 实现步骤

  第一步:在控制器中创建AutoCompleted的Aciton

返回类型JsonResult。为JQuery AutoComplete组件提供Json格式的数据

        /// <summary>
        ///
        /// </summary>
        /// <param name="term"></param>
        /// <returns>
        //http://localhost:3951/Reviews/autocompleted?term=老
        //返回JSON,如下格式:
        //  [
        //    {"label":"老字号餐馆1000"},{"label":"老字号餐馆1001"},{"label":"老字号餐馆1002"},
        //    {"label":"老字号餐馆1003"},{"label":"老字号餐馆1004"},{"label":"老字号餐馆1005"},
        //    {"label":"老字号餐馆1006"},{"label":"老字号餐馆1007"},{"label":"老字号餐馆1008"},{"label":"老字号餐馆1009"}
        //  ]
        /// </returns>
        public ActionResult AutoCompleted(string term)
        {
            var model = _restaurantReviews.Where(r=>r.Name.ToLower().Contains(term.ToLower().Trim()))
                .Take(10)
                .Select(r=> new
                {
                    label = r.Name //匿名对象的字段名必须是label,因为ui.item.label
                });

            //serialize model into JSON format
            return Json(model,JsonRequestBehavior.AllowGet);
        }

  值得注意的是:

    匿名对象的字段名必须是label,因为在后面的js方法中用到的:

    var submitAutoCompleted = function(event, ui) {
        var $input = $(this);
        $input.val(ui.item.label);

        var $form = $input.parents("form:first");
        $form.submit();
    };

  ui.item.label名字是固定的,参看本文的第四步。

  第二步:为文本框填添加属性data-otf-autocompleted,用于锚点

<input type="search" name="searchKey"     data-oft-ajax-autocompleted="@Url.Action("AutoCompleted")" />
@Url.Action("AutoCompleted")是指向第一步定义的Action:
  public ActionResult AutoCompleted(string term)

  

  第三步:添加javascript代码处理

$(function () {

    var createAutoCompleted = function() {
        var $input = $(this);
        var ajaxOption = {
            source: $input.attr("data-oft-ajax-autocompleted") //告诉AutoComplete组件去哪里获取数据
        };

        $input.autocomplete(ajaxOption);
    }

    $("input[data-oft-ajax-autocompleted]").each(createAutoCompleted);
});       

  到这一步,就实现了实现了自动提示输入功能。

注意,当没有看到效果,尝试检查是否存在如下原因:

  如果上面的js代码是在原来已经存在的js文件(比如:abc.js)中添加,浏览器已经如果加载过该js文件,就有可能不会再加载js文件,

导致该js文件中不存在我们第三步添加的js代码。处理办法是:刷新页面(按F5键)。

  第四步:添加当选择提示下的某一项时,需要处理的逻辑:

    在ajaxOptin中添加select参数:

在这里要演示的是,当选中文本框的某项后,导致其父html的Form提交表单,html代码如下:

<form method="post"
      action="@Url.Action("Index")"
      data-otf-ajax="true"
      data-otf-ajax-updatetarget="#restaurantList">
    <input type="search" name="searchKey" data-oft-ajax-autocompleted="@Url.Action("AutoCompleted")" />
</form>

  然后,在js文件中添加javascrtpt代码,使得

当选中文本框的某项后,导致其父html的Form提交表单

$(function () {

    var submitAutoCompleted = function(event, ui) {
        var $input = $(this);
        $input.val(ui.item.label);

        var $form = $input.parents("form:first");
        $form.submit();
    };

    var createAutoCompleted = function() {
        var $input = $(this);
        var ajaxOption = {
            source: $input.attr("data-oft-ajax-autocompleted"), //告诉AutoComplete组件去哪里获取数据
            select:submitAutoCompleted                          //选择某选项后,要处理的逻辑
        };

        $input.autocomplete(ajaxOption);
    }

    $("input[data-oft-ajax-autocompleted]").each(createAutoCompleted);
}); 

  用FireFox浏览器的Firebug插件,可以监视到:ui.item.label名字是固定的。显然,当item.value没显式设置值时,自动被赋值为item.labe

  item--官网给的解释:

  • item

    Type: Object

    • label

      Type: String

      The string to display for the item.

    • value

      Type: String

      The value to insert into the input when the item is selected.

其他资料:

  http://www.cnblogs.com/yongheng178/archive/2011/11/15/2249632.html

时间: 2024-10-13 07:32:08

【ASP.Net MVC】在AspNet Mvc使用JQuery AutoComplete组件的相关文章

【ASP.Net MVC】AspNet Mvc一些总结

AspNet Mvc一些总结 RestaurantReview.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text.RegularExpressions; using System.Web; using System.Web.M

MVC笔记3:JQuery AutoComplete组件

1.引入以下js和css <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

ASP.NET MVC的客户端验证:jQuery的验证

http://www.cnblogs.com/artech/archive/2012/06/17/client-validation-01.html 之前我们一直讨论的Model验证仅限于服务端验证,即在Web服务器根据相应的规则对请求数据实施验证.如果我们能够在客户端(浏览器)对用户输入的数据先进行验证,这样会减少针对服务器请求的频率,从而缓解Web服务器访问的压力.ASP.MVC 2.0及其之前的版本采用ASP.NET Ajax进行客户端验证,在ASP.NET MVC 3.0中,jQuery

ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现

原文:ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现 在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的.服务端验证最终实现在相应的ModelValidator中,而最终的验证规则定义在相应的ValidationAttribute中:而客户端验证规则通过HtmlHelper<TModel>相应的扩展方法(比如TextBoxFor.EditorFor和Edid

【ASP.Net MVC】在AspNet Mvc使用Ajax

目录 一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 1.2 System.Web.Mvc.Ajax.ActionLink 二.手工打造自己的“非介入式”Javascript” 一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 第一步:用Ajax.BeginForm创建Form @using (Ajax.BeginForm( new AjaxOptions() {

NU1002 The dependency Microsoft.AspNet.Mvc 5.2.3 in project dotnetstarter does not support framework

NU1002 The dependency Microsoft.AspNet.Mvc 5.2.3 in project dotnetstarter does not support framework DNXCore,Version=v5.0. 解决"CS0234 The type or namespace name 'Mvc' does not exist in the namespace 'Microsoft.AspNet' (are you missing an assembly refe

数往知来 ASP.NET MVC HtmlHelper、MVC快速增删改查 Cache MVC3客户端验证 MVC隐式异步提交 &lt;二十八&gt;

一.HtmlHelper.MVC快速增删改查 MVC 在MVC里面请求首先到控制器-->然后 -->数据库数据放在APP_DATE文件夹里, -->js.css文件放在content文件夹里 -->控制器放在Controllers里,控制器要以controller结尾 控制器下面的所有方法都称为action 2)webform跟 aspnet MVC:区别请求的地址不一样了 MVC请求的是控制器下面的action webform:aspx页面或者是一般处理程序 -->a标签

ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现

from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https://github.com/NSwag/NSwag This article shows how to document your ASP.NET Core 1.0 MVC API using Swagger with Swashbuckle. Per default, it does not us

ASP.NET Core 2.0 MVC项目实战

 一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还是用的那种传统的开发模式,只有一个项目用到了Web API,自己负责后端的接口功能实现.既然现在没办法改变现状,那就先改变自己吧.定了个计划,下班后慢慢的开始学习ASP.NET Core Web API和Vue,准备从前端到后端自己写一个小项目玩玩,毕竟代码这个东西,时间长了是会忘的.