当前位置: 首页 > news >正文

MVC下的客户端模板技术

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个人员信息(模拟从数据库查询数据)

private List<UserModel> GetUserList()
        {
            List<UserModel> users = new List<UserModel>();
            UserModel user = new UserModel
            {
                UserId = "1",
                UserName = "zhangman",
                Address = "江苏徐州",
                Phone = "1515076549"
            };
            users.Add(user);

            user = new UserModel
            {
                UserId = "2",
                UserName = "liming",
                Address = "江苏泰州",
                Phone = "1515076549"
            };
            users.Add(user);

            user = new UserModel
            {
                UserId = "3",
                UserName = "wangwu",
                Address = "江苏泰州",
                Phone = "1515076549"
            };
            users.Add(user);

            user = new UserModel
            {
                UserId = "4",
                UserName = "zhangqun",
                Address = "江苏徐州",
                Phone = "1515076549"
            };
            users.Add(user);

            user = new UserModel
            {
                UserId = "5",
                UserName = "liuliang",
                Address = "江苏常州",
                Phone = "15861887528"
            };
            users.Add(user);

            user = new UserModel
            {
                UserId = "6",
                UserName = "huangqun",
                Address = "江苏徐州",
                Phone = "15861887528"
            };
            users.Add(user);

            return users;
        }

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

public ActionResult Index(string userName = "")
        {
            List<UserModel> list = GetUserList();
            if (!userName.Equals(""))
            {
                list = list.Where(user => user.Address.Contains(userName)).ToList();
            }
            //使用JavaScript客户端模版技术
            if (Request.IsAjaxRequest())
            {
                return Json(list, JsonRequestBehavior.AllowGet);
            }
            return View(list);
        }

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

 

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

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

<script type="text/template" id="searchUsers">
    <table style="width:100%">
        <tr>
            <td>{{UserId}}</td>
            <td>{{UserName}}</td>
            <td>{{Address}}</td>
            <td>{{Phone}}</td>
        </tr>
    </table>
</script>

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

<script type="text/javascript">
    $("#search").click(function () {
        var key = $("#key").val().trim();
        if (key == "") { return; }
        $.ajax({
            cache: false,
            type: "GET",
            url: "/Home/Index",
            data: { "userName": key },
            success: function (data) {
                //服务器端返回的是JSON的话typeof()返回Object对象
                //否则reurn View()返回html界面,typeof()返回string
                if(typeof(data)==typeof(new Object())){
                    var result = "";
                    $("#myusers").html("");
                    $.each(data, function (index, row) {
                        var template = $('#searchUsers').html();      //获取模版的html
                        var htmls = Mustache.render(template, row);   //把每行的数据填充到模版得到html内容
                        $("#myusers").append(htmls);
                    });
                }
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('加载失败');
            }
        });
    });

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

转载于:https://www.cnblogs.com/dreamGong/p/4561620.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 关于系统“登陆类型”的定义
  • [转]在做自动化测试之前你需要知道的
  • vSphere 4系列之一:vSphere简介
  • Outlook自动答复设置
  • mysql体系结构和存储引擎结构
  • 基于 hive 的日志数据统计实战
  • Windows 7系统IE8浏览器如何启用或禁用自动保存网页密码的功能?
  • centos7 服务器部署ssh证书授权登录
  • 自己动手写printf
  • yum安装MySQL
  • Android开发技巧:像QQ一样输入表情图像
  • Linux有时会出现“You have new mail in /var/spool/mail/root”
  • Spring-data-jpa复杂查询示例
  • 美联邦贸易委员会强令最差ISP下线
  • 数学 --- 高斯消元 POJ 1830
  • [笔记] php常见简单功能及函数
  • 2017前端实习生面试总结
  • Akka系列(七):Actor持久化之Akka persistence
  • Android Volley源码解析
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • JS实现简单的MVC模式开发小游戏
  • SegmentFault 2015 Top Rank
  • win10下安装mysql5.7
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 对象管理器(defineProperty)学习笔记
  • 解析带emoji和链接的聊天系统消息
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 软件开发学习的5大技巧,你知道吗?
  • ‌‌雅诗兰黛、‌‌兰蔻等美妆大品牌的营销策略是什么?
  • # Maven错误Error executing Maven
  • # 计算机视觉入门
  • #define,static,const,三种常量的区别
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (4)(4.6) Triducer
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (zhuan) 一些RL的文献(及笔记)
  • (转)大型网站的系统架构
  • (转)人的集合论——移山之道
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Core跨平台微服务学习资源
  • .NET Remoting学习笔记(三)信道
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net连接oracle数据库
  • 。。。。。
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记