MVC的自动填充功能
2016-01-05 11:50
543 查看
为了实现这个功能,几乎两个周没有作别的事情,好在是最近不是很忙,领导也没有安排其他的工作,所以才能静下心来认真的,不厌其烦的来学这个事情,这个功能其实涉及的东西比较多,例如javaScript, jQuery, JSON, MVC等。其中几乎每一样对外来说都不是很精通,也正好一边学,一边实现功能。
先上代码:第一部分:引用
<link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" /> <script src="~/Scripts/jquery-2.0.3.js"></script> <script src="~/Scripts/jquery-ui-1.10.3.js"></script>
解释一下
三条引用中,第二条和第三条是必须的,没有的话,就不能实现是自动填充的功能,版本无所谓,但是别太老,因为我这边测试jquery1.4版本的貌似autocomplete的 部分会有很大的差异。所以建议尽量用新一点的版本,这里第一条引用不是必须的,但是没有的话,会比较难看。
第二部分:javaScript代码
这里实现多值填充:<script> $("#text1").each(function () { var target = $(this); target.autocomplete({ source: function (req, resp) { $.ajax({ url: target.attr("data-autocomplete-source"), type: "POST", dataType: "json", data: { term: req.term }, success: function (data) { resp($.map(data, function (item) { return { label: item.FirstName, value: item.FirstName, Address: item.Address, Title:item.Title}; })); } }); }, select: function (event, ui) { if (ui.item) { $("#text1").val(ui.item.label); $("#text2").val(ui.item.Title); $("#text3").val(ui.item.Address); } } }); });
继续解释代码
第一行:$(“#text1”).each(function (){}
这个是格式,套用就行,需要改的就是#号后面的部分,这个是ID,即你希望进行输入的textbox的ID。
第二行可以不这个写,这个是我自己的编程风格。在于第三行:
target.autocomplete({})这个函数,其实是使用的target.autocomplete({source,select})格式,当然时间可以再添加其他的参数,不过采用了多值填充最基本的两要素格式,看上面额代码感觉很多,但是其实其他的代码主要是对source和select的必要参数的赋值。赋值的方式在要赋值的要素后加function(){},这里可以是带对应参数的。
其中source使用了ajax的函数
$.ajax({ url: target.attr("data-autocomplete-source"), type: "POST", dataType: "json", data: { term: req.term }, success: function (data) { resp($.map(data, function (item) { return { label: item.FirstName, value: item.FirstName, Address: item.Address, Title:item.Title};
这是ajax的基本格式,套用就行。
1、url后面是网址,‘target.attr(“data-autocomplete-source”)’是我在开始时候赋的值”@Url.Action(“QuickSearch”, “Home”)”。也就是你自己的网址jSON动作。
2、type就这么写就行,需要注意的是,你的”@Url.Action(“QuickSearch”, “Home”)”不需要是HttpPOST。
3、dataType: “json”,这个也是格式,这么写就可以。
4、data: { term: req.term },格式这个写就行,但是需要注意的地方就是req是source的参数,需要和的括号内的对应,req, resp其实分别对应请求和相应,这里data的term参数需要和请求的term对应。
5、这里需要重点说的是success部分,这里非常容易出错,也是肯以实现很多功能的地方。我们来分开分析:
success: function (data) { resp($.map(data, function (item) { return { label: item.FirstName, value: item.FirstName, Address: item.Address, Title:item.Title}}}
这个参数的定义是,在数据源请求成功后,实现的功能,一般用函数赋值,ajax请求的是JSON数据源,所以返回的数据也是JSON,因为这其实是一个赋值的过程,我们要把获得的JSON数据赋值给响应。所以函数形式需要带data的参数。success: function (data) {},因为是要给响应赋值,所以就是success: function (data) { resp}
map() 把每个元素通过函数传递到当前匹配集合中,生成包含返回值的新的 jQuery 对象。
我就把它理解为格式吧:
.map(data,function(item)returnobject其中returnlabel:item.FirstName,value:item.FirstName,Address:item.Address,Title:item.Title这个中,label,和value必须有,其他的参数则可以随便,命名,用来填充其他的textbox。但是这里resp(.map()}这个形式还不太理解,我把他理解为用map为网页响应赋值(而且是对集合赋值)。这样就可以在select的要素中进行赋值了。
6、来看select要素的赋值
select: function (event, ui) { if (ui.item) { $("#text1").val(ui.item.label); $("#text2").val(ui.item.Title); $("#text3").val(ui.item.Address); }
同样是利用函数赋值(注意带两个参数) ,因为是响应用户操作,所以需要用event参数,同时通过UI这里应该是从上面的resp中传过来的参数,然后用if语句,标识如果用户选择了选项,那么就给其他的输入标签赋值。这里没什么,需要注意的一个地方就是赋值的时候是用的val。
至此前台代码就写好了,后台的代码其实无所谓,就按照一般的JSON获取语句写就可以了,这里为了方便起见,还是将后台的数据代码列出来,仅供参考:
public ActionResult QuickSearch(string term) { var result = GetEmployees(term).Select(a => new { FirstName = a.FirstName, Title = a.Title, Address =a.Address}); return Json(result, JsonRequestBehavior.AllowGet); } private List<Employee> GetEmployees(string searchString) { IEnumerable<Employee> datasource = new[] { new Employee { Address="山东", FirstName="petre", EmployeeID=0, Title="董事" }, new Employee { Address="日本", FirstName="Alice", EmployeeID=0, Title="经理" }, new Employee { Address="广东", FirstName="Bob", EmployeeID=0, Title="副经理" }, new Employee { Address="台湾", FirstName="Chails", EmployeeID=0, Title="董事" }, new Employee { Address="澳门", FirstName="Thomas", EmployeeID=0, Title="董事" }, new Employee { Address="北京", FirstName="Mike", EmployeeID=0, Title="董事长" } }; return datasource .Where(a => a.FirstName.Contains(searchString)) .ToList(); }
以上是json的代码。
下面是control的代码
public ActionResult Index() { return View(); } <input type="text" id="text1" data-autocomplete-source="@Url.Action("QuickSearch", "Home")"/> <input type="text" id="text2" data-autocomplete-source="@Url.Action("QuickSearch", "Home")" /> <input type="text" id="text3" data-autocomplete-source="@Url.Action("QuickSearch", "Home")" />
以上是三个输入框。
至此,就可以实现基于MVC的多值自动填充功能了。
由于是一遍学习一遍写的,(html前端不是很精通,刚开始学习),所以理解上可能会一些错误,欢迎大家指正。
虽然我暂时还是不是很精通,但是这部分功能,可以比较灵活的实现了,也欢迎大家有什么问题,给我留言。我尽量帮大家测试,一起解决。
这里还需要补充的一点就是js的位置很重要,输入标签一定要在scripts代码的前面。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- 分享微信开发Html5轻游戏中的几个坑
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- 2015-2016网页设计趋势分析 Web Design of Trends
- javascript实现10进制转为N进制数
- jQuery Ajax 跨域调用
- 移动端的长按事件
- jquery教程靠边站,一分钱不花让你免费学会jquery
- JQuery+Strusts1.x无刷新登录
- 许多数据中心的工作者很满意他们的工作,将鼓励他们的孩子继续从事这份工作
- XML 与 JSON 优劣对比
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- Jquery学习笔记:获取jquery对象的基本方法