本文主要记录 JsRender模板 的使用

  1. 表结构
  2. 界面样式
  3. 让div可拖拽
  4. 数据绑定
  5. 使用模板 JsRender
  6. Controller代码

先看看效果图,演示地址:http://www.5imvc.com/  新域名绑定啦,备用地址:http://linfei721.s5.jutuo.net/Home

其实实现div拖拽利用jQueryUI做很简单,呵呵,本文主要介绍怎么使用 JsRender 做模板

表结构

CREATE TABLE [dbo].[MyNote]([ID] [int] IDENTITY(1,1) NOT NULL,    --编号[NContent] [varchar](max) NOT NULL,    --留言内容[IP] [varchar](50) NULL,            --发布者IP[Date] [datetime] NOT NULL,            --留言时间CONSTRAINT [PK_MyNote] PRIMARY KEY CLUSTERED
([ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

界面样式和div

    <style>.draggable {width: 200px;height: 150px;padding: 0.5em;float: left;margin: 0 10px 10px 0;border: 1px solid #ccc;background: #fafafa;position: relative;}.draggable .title {cursor: move;padding: 5px;background: #ccc;color: #fff;}.draggable .date {position: absolute;left: 15px;bottom: 5px;}</style><div class="contentbox" id="containment-wrapper" style="height: 100%;"><div class="draggable"><div class="title">title</div>内容<div class="date">2013-05-01</div></div></div>

如何让div可以拖动

先利用jQueryUI的draggable方法让我们的div可以拖拽,详细请看:http://jqueryui.com/draggable/,代码:

//让div可以拖拽
$(".draggable").draggable({containment: "#containment-wrapper", scroll: false,start: function (e, ui) {$(".draggable").zIndex("");$(this).zIndex(1000);}
});//阻止文本被选中
$(".contentcontainer").disableSelection();

这里在拖拽的事件中增加了一个 start,所有小纸条的zIndex等于空,然后在对当前拖拽的div增加到最上层,这样防止拖拽时被其他div遮挡

containment 的参数是让所有小纸条在制定的div内部

数据绑定

最后考虑怎么绑定数据,可以用mvc的机制,代码如下:

<div class="contentbox" id="containment-wrapper" style="height: 100%;">@foreach (var item in Model){<div class="draggable"><div class="title">title</div>@item.NContent<div class="date">@item.Date</div></div>}</div>

View Code

但是这样不友好,我需要用无刷新的方式来实现,但是通常我们做法是字符串拼接来生成一个html的字符串

$.post("@Url.Action("NoteList")", function (data) {var html = "";$(data).each(function (index, e) {html += "<div class='draggable'><div class='title'>title</div>" + e.NContent + "......";});},"json");

这样代码不好维护,使用也不方便,所以我们可以使用 jQuery模板来实现,其实网上有很多种,我找了一个叫 JsRender 的,

使用JsRender模板

详细请看:https://github.com/BorisMoore/jsrender ,里面很多案例

下面来看看代码 ,先需要定义个模板,看看代码是不是简单清晰多了,呵呵

<script src="~/Scripts/jsrender.js"></script>

<script id="Template" type="text/x-jsrender"><div class="draggable" style="top: {{attr: top}}px; left: {{attr:left }}px;"><div class="title">NO:{{:#index+1}}</div>
        {{:NContent}} <div class="date">{{:Date}}</div></div>
</script>

用{{:变量}}或{{>变量}}来显示数据 ,: 和 >的区别在于 转义html, : 会直接显示包括html代码,>是会将html转义

{{attr:变量}}表示这是属性值,其实还有很多方法,大家可以去官网看看,例如 if for 等等

这里的 {{attr:top}} Visual Studio 会提示警告,但是并不影响我们的模板

再来看看绑定的代码,就这么一句话,直接把json的数据传给模板就能生成了

$.post("@Url.Action("NoteList")", function (data) {      $("#containment-wrapper").html($("#Template").render(data));},"json");

Controller 代码

前端的代码就写完了,再来看看 Controller 的代码

     /// <summary>/// 获取留言列表/// </summary>/// <returns></returns>public ActionResult NoteList(){//获取留言前100条var list = db.MyNote.OrderByDescending(o => o.Date).Take(100).ToList();int count = list.Count;List<object> pos = new List<object>();Random ra = new Random();//生成每个div随机偏移坐标,打乱div的位置var top = Enumerable.Range(1, count).Select(s => ra.Next(-20, 30)).ToList();var left = Enumerable.Range(1, count).Select(s => ra.Next(-20, 30)).ToList();//增加到集合for (int i = 0; i < count; i++){pos.Add(new { top = top[i], left = left[i], NContent = list[i].NContent, Date = list[i].Date });}return JsonDate(pos);//return Json(pos, JsonRequestBehavior.AllowGet);}

这里有两点需要注意,

1.top和left变量,在循环或大量需要调用linq的时候,一定要使用ToList()方法存储到变量中,不要在使用时去ToList(),在循环内部去ToList()效率会非常低,之前吃过亏,呵呵

2.MVC中Controller的Json方法返回带时间的数据时,格式会变成 "\/Date(1369419656217)\/" 这样的,这里的 JsonDate 方法请看我的这个帖子:http://www.cnblogs.com/linfei721/archive/2013/05/25/3098614.html

好了,写完了,有什么不对的地方希望大家提出来哦

转载于:https://www.cnblogs.com/linfei721/archive/2013/05/25/3098897.html

用MVC做可拖拽的留言板,利用 Jquery模板 -- JsRender相关推荐

  1. 【C#/WPF】用Thumb做可拖拽的UI控件

    [C#/WPF]用Thumb做可拖拽的UI控件 原文:[C#/WPF]用Thumb做可拖拽的UI控件 需求:简单的可拖拽的图片 使用System.Windows.Controls.Primitives ...

  2. 自己做悬浮拖拽按钮依赖

    PS:悬浮拖拽按钮的使用也是非常广的,就比如说上一个网站的时候就会弹出一个对话框,对话框可以随意拖动,那么安卓手机上可以实现吗,答案是可以的,这就用到了自定义view的按压点击等事件,本文的例子比较简 ...

  3. 表单验证JavaScript实现正则匹配、随机验证码、密码强度、加拖拽加蒙板

    要求实现如下功能: 1.正则匹配用户名  邮箱  密码  手机号 2.随机验证码 3.密码强度 4.加拖拽 加蒙版 html代码 <div id="mask">< ...

  4. 可拖拽的html5页面编辑,jQuery实现拖拽可编辑模块功能代码

    在没给大家分享实现代码之前,先给大家展示下效果图: 具体实现代码如下所示: index.html iNettuts - Welcome! iNettuts 简介窗口 如果你活着,早晚都会死:如果你死了 ...

  5. jquery的sortable拖拽排序问题,在页面上多次拖拽保存顺序之后,刷新页面,排序出现紊乱

    一.前言 这篇博客是因为我在做完拖拽保存之后,测试多次拖拽,然后刷新页面,发现保存的顺序出来紊乱.这就很无奈了啊,打印各项数据才发现,因为保存用的是ajax的方式,所以页面上的列表序号是固定的,比如列 ...

  6. JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)

    原文:JS组件系列--Bootstrap Table 表格行拖拽(二:多行拖拽) 前言:前天刚写了篇JS组件系列--Bootstrap Table 表格行拖拽,今天接到新的需要,需要在之前表格行拖拽的 ...

  7. vue 移动到图片浮动_基于Vue实现拖拽升级(九宫格拖拽)

    前言 在本文中将会用Vue完成九宫格拖拽效果,同时介绍一下网格布局.具体代码以及demo可以点以下超链接进入 效果实例 Demo 简单了解Grid布局(网格布局) 什么是网格布局 CSS网格布局(又称 ...

  8. 小程序Android端movable-view拖拽卡顿掉帧的优化

    背景: 最近项目中使用到movable-view来做一个拖拽排序的功能,等到功能都实现完成后到真机测试发现,拖拽动画在Android端存在严重的卡顿掉帧,及其不跟手,但是在IOS端却挺流畅.查阅Goo ...

  9. jquery UI 跟随学习笔记——拖拽(Draggable)

    jquery UI 跟随学习笔记--拖拽(Draggable) 引言 这周暂时没有任务下达,所以老大给我的任务就是熟悉jquery相关插件,我就先选择了jquery UI 插件,以及jquery库学习 ...

最新文章

  1. 3,ORM组件XCode(简介)
  2. 树莓派GPIO的两种模式区别
  3. 解决网络故障的一般方法
  4. arm中的.a文件如何产生的_可变文件系统:如何在IPFS中处理文件?
  5. alert文件位置 oracle,Oracle11gAlertlog文件位置的问题
  6. python 列表加入_加入python中的列表列表
  7. 嵌入式linux+io+优化,嵌入式Linux系统内存优化使用方法研究
  8. JSP语法(JSP动作)
  9. Tensorflow卷积神经网络
  10. 若依如何使用多数据源?
  11. AI 应届博士生年薪八十万,贵吗?
  12. matplotlib 中文_Python 关于matplotlib无法显示中文字体的解决方法
  13. 配置springMVC
  14. [数据结构]--WiscKey: Separating Keys from Values in SSD-Conscious Storage
  15. AD19导出bom表的方法(按照元件不同数值分类,重点信息突出)
  16. KrakenD网关V1.0.0文档初步翻译
  17. 歌曲影视随意赏计算机课件,世界影视音乐赏析课件.ppt
  18. 听小S教你如何瘦小腿
  19. threejs特效:选中效果
  20. [推荐]《人一生要读的60本书》

热门文章

  1. Python中常用的内置方法
  2. 在python中传统除法运算符是_在Python中使用除法运算符时,如何获取十进制值?...
  3. win10删除开机密码_讲解win10忘记开机密码
  4. 2021年末储能季,送4本面试宝典
  5. 金秋10月丰收季,送3本Java书New一个秋天的对象
  6. Triumph X发布著名摄影师Kim Joong-man首个NFT系列
  7. SAP License:实施ERP之后库存反而增加
  8. SAP License:凭证冲销
  9. 后台业务管理系统原型模板/在线教育后台管理系统/客服系统/财务管理/用户管理/订单管理/教育业务后台管理/课程管理/教师管理/活动管理/文章管理/Axure高保真在线教育行业原型/Axure后台管理
  10. PE知识复习之PE的各种头属性解析