1、引言

  在Web编程中,我们有时经常需要使用Ajax来访问服务端的接口,然后使用这些返回的数据(一般格式都是JSON)来展示客户端的相关信息。例如:在一个商品列表,我们点击某一样的商品,查看该商品的信息信息。这时通过指定的ID来获取商品详细信息后,我们很多时候都是讲HTML和JavaScript结合起来。通过构造HTML标签和JS的填充来展示相关的界面。这样大量的标签拼接,一来不容易维护,二来也导致在编码过程中容易出现错误。今天我给大家做一下客户端模板技术的简单介绍。希望可以通过这个技术在一定程度上可以缓解类似的问题。

2、mustache.js简介

  Mustache 是一个 Logic-less templates,原本是基于javascript 实现的模板引擎,类似于 freemark和valicity ,但是比freemark和valicity更加轻量级更加容易使用,经过拓展目前支持JS,java,.NET,PHP,C++等多种平台下开发!官方地址是:http://mustache.github.io。下面就来介绍使用mustache进行简单的一些应用。

  我在项目中新建HomeController,模拟人员的管理和相关操作。如图所示:新建一个方法默认生成5个人员信息(模拟从数据库查询数据)

  1. private List<UserModel> GetUserList()
  2. {
  3. List<UserModel> users = new List<UserModel>();
  4. UserModel user = new UserModel
  5. {
  6. UserId = "",
  7. UserName = "zhangman",
  8. Address = "江苏徐州",
  9. Phone = ""
  10. };
  11. users.Add(user);
  12.  
  13. user = new UserModel
  14. {
  15. UserId = "",
  16. UserName = "liming",
  17. Address = "江苏泰州",
  18. Phone = ""
  19. };
  20. users.Add(user);
  21.  
  22. user = new UserModel
  23. {
  24. UserId = "",
  25. UserName = "wangwu",
  26. Address = "江苏泰州",
  27. Phone = ""
  28. };
  29. users.Add(user);
  30.  
  31. user = new UserModel
  32. {
  33. UserId = "",
  34. UserName = "zhangqun",
  35. Address = "江苏徐州",
  36. Phone = ""
  37. };
  38. users.Add(user);
  39.  
  40. user = new UserModel
  41. {
  42. UserId = "",
  43. UserName = "liuliang",
  44. Address = "江苏常州",
  45. Phone = ""
  46. };
  47. users.Add(user);
  48.  
  49. user = new UserModel
  50. {
  51. UserId = "",
  52. UserName = "huangqun",
  53. Address = "江苏徐州",
  54. Phone = ""
  55. };
  56. users.Add(user);
  57.  
  58. return users;
  59. }

  在控制器中我们可以提供这样的方法

  1. public ActionResult Index(string userName = "")
  2. {
  3. List<UserModel> list = GetUserList();
  4. if (!userName.Equals(""))
  5. {
  6. list = list.Where(user => user.Address.Contains(userName)).ToList();
  7. }
  8. //使用JavaScript客户端模版技术
  9. if (Request.IsAjaxRequest())
  10. {
  11. return Json(list, JsonRequestBehavior.AllowGet);
  12. }
  13. return View(list);
  14. }

  在界面第一次运行的时候我们我们看到运行的界面如下:

  我们需要按照地域进行搜索,例如搜索出徐州的用户。这时我们可以使用Ajax进行访问Index方法。然后将返回的JSON使用模板技术进行填充。注意:这个例子只是作为简单的介绍而已,不具有代表性。

  首先我们来看下模板的定义。在Script标签中我们可以定义一个模板。然后JSON值需要填充的位置是有mustache.js的语法进行定义(占位)

  1. <script type="text/template" id="searchUsers">
  2. <table style="width:100%">
  3. <tr>
  4. <td>{{UserId}}</td>
  5. <td>{{UserName}}</td>
  6. <td>{{Address}}</td>
  7. <td>{{Phone}}</td>
  8. </tr>
  9. </table>
  10. </script>

  然后使用Jquery对服务器发起Ajax请求获取JSON数据,这时我们可以使用mustache.js中的方法来填充占位处。这样就形成一段正常的Html代码。Ajax代码如下(模拟点击搜索操作)

  1. <script type="text/javascript">
  2. $("#search").click(function () {
  3. var key = $("#key").val().trim();
  4. if (key == "") { return; }
  5. $.ajax({
  6. cache: false,
  7. type: "GET",
  8. url: "/Home/Index",
  9. data: { "userName": key },
  10. success: function (data) {
  11. //服务器端返回的是JSON的话typeof()返回Object对象
  12. //否则reurn View()返回html界面,typeof()返回string
  13. if(typeof(data)==typeof(new Object())){
  14. var result = "";
  15. $("#myusers").html("");
  16. $.each(data, function (index, row) {
  17. var template = $('#searchUsers').html(); //获取模版的html
  18. var htmls = Mustache.render(template, row); //把每行的数据填充到模版得到html内容
  19. $("#myusers").append(htmls);
  20. });
  21. }
  22. },
  23. error: function (xhr, ajaxOptions, thrownError) {
  24. alert('加载失败');
  25. }
  26. });
  27. });

  可以看到在代码中通过服务器返回的JSON,客户端一行行的进行遍历填充。然后追加到指定的位置。搜索后效果如下:

MVC下的客户端模板技术的更多相关文章

  1. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。

    快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...

  2. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  3. MVC下判断PC和移动端

    MVC下的PC端和移动端,其实没区别,写法都一样,只是有两点才改变了它们 第一点:就是单击这个页面任何地方的时候判断是移动端还是客户端: 第二点:新建手机端区域Areas(简单来说:Areas就相当于 ...

  4. MVC下分页的自定义分页一种实现

    1.引言 在MVC开发中我们经常会对数据进行分页的展示.通过分页我们可以从服务端获取指定的数据来进行展示.这样既节约了数据库查询的时间也节约了网络传输的数据量.在MVC开发中使用的比较多的应该是MVC ...

  5. trait与policy模板技术

    trait与policy模板技术 我们知道,类有属性(即数据)和操作两个方面.同样模板也有自己的属性(特别是模板参数类型的一些具体特征,即trait)和算法策略(policy,即模板内部的操作逻辑). ...

  6. Django之--通过MVC架构的html模板展示Hello World!

    上一篇:Django之--网页展示Hello World! 初步说明了如何使用Django来显示hello world,本文略微进阶下使用html模板来展示hello world~ 首先在mysite ...

  7. MVC下压缩输入的HTML内容

    在MVC下如何压缩输出的HTML代码,替换HTML代码中的空白,换行符等字符? 1.首先要了解MVC是如何输出HTML代码到客户端的,先了解下Controller这个类,里面有很多方法,我们需要的主要 ...

  8. ASP.NET MVC下的四种验证编程方式[续篇]

    在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...

  9. ASP.NET MVC下的四种验证编程方式

    ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...

随机推荐

  1. CSS强制英文、中文换行与不换行 强制英文换行

    1. word-break:break-all;只对英文起作用,以字母作为换行依据 2. word-wrap:break-word; 只对英文起作用,以单词作为换行依据 3. white-space: ...

  2. 系统间通信(9)——通信管理与RMI 下篇

    接上文<架构设计:系统间通信(8)--通信管理与RMI 上篇>.之前说过,JDK中的RMI框架在JDK1.1.JDK1.2.JDK1.5.JDK1.6+几个版本中做了较大的调整.以下我们讨 ...

  3. 在ORACLE触发器里调用JAVA程序

    因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 publ ...

  4. Spark Shell & Spark submit

    Spark 的 shell 是一个强大的交互式数据分析工具. 1. 搭建Spark 2. 两个目录下面有可执行文件: bin  包含spark-shell 和 spark-submit sbin 包含 ...

  5. 关于使用struts2时子窗体页面跳转后在父窗体打开的问题以及Session过期后的页面跳转问题

    问题1:传统的系统界面,iframe了三个页面,上,左,右,用户点击注销的按钮在上面得top.jsp里面,方法:<a href="../adminAction/admin_logout ...

  6. komodo,mysql workBeach

    跨平台的好软件,只不过自己的眼界太狭隘 Ubuntu下PPA安装,打开终端输入命令:   sudo add-apt-repository ppa:mystic-mirage/komodo-edit   ...

  7. UOJ34 多项式乘法

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. ZendGuardLoader安装

    遇到的问题 php -v Zend Guard Loader requires Zend Engine API version 220090626. The Zend Engine API versi ...

  9. 移动端web app自适应布局探索与总结

    要掌握的知识点: iphone6 屏幕尺寸为 375*667 (pt)也就是 网页 全屏显示时候 document.documentElement.clientWidth------可以理解为屏幕越大 ...

  10. Io 异常: The Network Adapter could not establish the connection 解决方法

    1.IP错误: 在设置URL时错误,例如:jdbc:oracle:thin:@192.168.1.80:1521:orcl 数据库服务器是否正确:ping 服务器IP是否通畅.ping不通则将URL更 ...