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

基于Javaweb+MVC的项目+留言板 立即下载

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

先看看效果图,演示地址:http://www.5imvc.com/

其实实现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]

界面样式

    <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>

先利用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>

但是这样不友好,我需要用无刷新的方式来实现,但是通常我们做法是字符串拼接来生成一个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 的,

详细请看: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 的代码

     /// <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

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

jquery留言板 jq实现的留言板,可以进行发布留言和删除留言操作 立即下载

相关推荐

jQuery 实现从左侧滑出的留言板

内容索引:脚本资源,jQuery,留言板,jQuery滑动代码  jQuery 实现从左侧滑出的留言板,平时是隐藏的,点击按钮后从左侧向右滑出一个面板,里面是一个留言板发送表单,你可以在这里留言,当然也可以隐藏起来。

js用MVC模式自定义拖拽功能

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33726943的博客 201

jQuery+Canvas实现的手写留言板

这一篇文章,先简单讲解一下如何在canvas画板上画出一条红色的斜线,或许能帮助大家了解canvas画板的实现。jQuery+Canvas实现的手写留言板。 1)通过html5的canvas元素,创建一个宽800,高600的画板。 a)默认情况下,canvas在浏览器中看不到,因为它是透明的 b)最好不要用css样式定义canvas的宽度和高度,而直接用width、height定义 c)如果浏览器不支持canvas时,canvas标签中的文字就会显示出来了 2)使用js调用canvas的2D图形API接口 a)moveTo(x,y):设定新路径的起始坐标。简单理解,我们在写毛笔字的时

MVC小系列(十五)【MVC+ZTree实现对树的CURD及拖拽操作】

根据上一讲的可以加载一棵大树,这讲讲下如果操作这颗大树 <link href="../../Scripts/JQuery-zTree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" /> <script src="../../Scripts/JQuery-zTree/js/jquery-1.4.4.min.js...

dianyunfan6593的博客 204

Jquery实现留言板

Jquery实现简易留言板

[Linux]双网卡 CentOS 系统中指定网络请求走特定网卡的配置方法

本文详细介绍了在双网卡CentOS系统中指定特定域名/IP通过指定网卡传输流量的方法。核心步骤包括:1)确认网卡信息(ip addr)和域名IP解析(nslookup);2)添加临时路由(ip route add);3)持久化配置(创建route-eth1文件);4)验证配置(ip route show和curl测试)。文章还提供了网关查询、路由删除等常见问题的解决方法,并区分了不同CentOS版本重启网络服务的命令差异。通过合理配置路由规则,可实现流量的定向传输需求。

wingaso的博客 1572

基于MVC的留言板项目——maven、JavaBean+Servlet+JSP

项目第一步1. 新建maven项目2. 完善结构文件夹改变文件夹类型包package3. 引入jar,更新pom第二步 第一步 1. 新建maven项目 注意: 新建maven项目 勾选 create from archetype,则选择所建项目内容;不勾选则建立空项目 此时建立webapp,选择如图 建立留言功能项目,message 此处不需要填写,idea自带maven,如果此处需要填写需自行安装 注意保证网络畅通,因为需要下载本地库(官网)的jar包 与模板所给的结构不同 2. 完善结构

weixin_46056458的博客 2535

stm32 Can通讯过滤器寄存器设置(实验验证)

起因:在使用stm32单片机can通讯时,参考手册的介绍与寄存器封装有差别,不好理解怎么去设置寄存器。在参考一些代码时,对怎么去设置过滤器还是难以理解。 解决: 在寄存器封装库中,我们发现CAN过滤器设置寄存器封装有CAN1->sFilterRegister[ x ].FR1 和 CAN1->sFilterRegister[ x ].FR2 两个寄存器,其封装如下:type

u013984214的专栏 3288

用MVC做可拖拽的留言板,利用 Jquery模板

本文主要记录 JsRender模板 的使用 表结构 界面样式 让div可拖拽 数据绑定 使用模板 JsRender Controller代码 先看看效果图,演示地址:http://www.5imvc.com/  新域名绑定啦,备用地址:http://linfei721.s5.jutuo.net/Home 其实实现div拖拽利用jQueryUI做很简单,呵呵,

萌萌的It人 www.itmmd.com 1798

当NetApp 7-mode遇到单控制器故障:HA模式手动修复全记录

本文详细记录了NetApp 7-mode存储系统在单控制器故障时的应急修复过程,包括HA配置重建、磁盘初始化和业务恢复等关键步骤。通过实战案例解析如何解决`VIA Interconnect is down`等典型问题,为企业级存储系统的高可用保障提供实用指南。

yolo5detector的博客 247

手把手教你用ObjectCRX进行Caxa二次开发:从零开始的环境搭建教程

本文是一份面向零基础初学者的Caxa二次开发实战指南,重点讲解如何使用ObjectCRX框架从零开始搭建开发环境。内容涵盖Visual Studio 2015版本锁定、ObjectCRX向导集成、项目创建、典型错误解决,并最终实现一个可在Caxa中运行的HelloWorld程序,帮助开发者快速入门并避开常见陷阱。

w3x4y的博客 513

jQuery设计留言板页面

【代码】jQuery设计留言板页面。

m0_58736001的博客 1146

基于YOLOv11的人脸识别系统:从构建到应用的全流程指南

深度学习是机器学习的一个分支,旨在通过多层神经网络模拟人脑的认知能力。它能够从大量数据中自动提取特征,并进行准确的预测和分类。在计算机视觉领域,深度学习技术已经取得了显著的成果,尤其是在图像识别、目标检测等方面。YOLOv11是YOLO系列模型的最新版本,结合了卷积神经网络(CNN)和其他创新技术。它在保持高精度的同时,显著提高了推理速度。YOLOv11的结构轻量且高效,非常适合实时目标检测任务。人脸检测的目标是从图像或视频中定位所有人脸的位置。

FJN110的博客 184

js实现留言板

具体的实现看以下代码,代码包含详细注释。效果图如下 输入内容为空 发布: 删除: 完整代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="w

xuehaocyuyan的博客 2802

在 SAP BTP ABAP 环境中测试多租户 SaaS 解决方案的完整实践指南

ABAP SaaS测试阶段关键实践 在SAP BTP ABAP环境中开发多租户SaaS解决方案时,测试阶段(TST)对确保产品质量尤为关键。测试阶段应包含两个主要维度: 业务功能验证: 通过软件组件管理确保测试环境与代码仓库同步 创建并验证业务角色分配,确保权限配置正确 测试Fiori Launchpad导航流程和跨应用跳转 验证inbound/outbound通信配置 自动化质量管控: 在开发环境(DEV)执行本地ATC检查和单元测试 通过ABAP Test Cockpit(ATC)进行代码质量检查 集成

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 298

51单片机计算器(源程序+流程图+答辩报告+综合设计)

保姆级讲解!C语言编程,使用51单片机及LCD1602显示屏实现!

m0_57007304的博客 2万+

jQuery实现留言板功能

jQuery实现留言板功能 绪论:今天课堂上做了一个小项目,使用jQuery实现留言板功能,秉着巩固和分享的心,来发布此篇文章。 留言样式效果: 以上是样式 下面我把css样式和排版放出来,功能的实现我单独讲 ...

意愿三七 6万+

药物吸收仿真软件:Caco-2_(9).Caco-2模型在药物开发中的案例分析

通过以上五个案例,我们可以看到Caco-2模型在药物开发中的重要作用。它不仅能够帮助我们预测药物的肠道吸收情况,还能够用于优化药物配方、评估代谢稳定性、研究药物相互作用以及转运蛋白的影响。这些体外实验和仿真分析的结果为药物的进一步临床研究提供了重要的参考依据,有助于缩短药物开发周期,提高研发效率。

kkchenjj的博客 864

jQuery实现留言板

如果没有恒心、毅力和信念,你会觉得做什么都是枯燥无味的。

weixin_45971935的博客 2063

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

spring MVC 简单案例(3)留言板

messagewall.html 输入了谁对谁说什么,点击提交后,会在下面显示刚才输入的信息 3.1引用Lombok依赖包,使用 @Data注解 ,自动完成get、set等方法 3.2 更快引入依赖的插件 EditStarters 3.3完成后端代码 3.4测试后端代码 当用户点击提交按钮后,对数据进行校验,然后将数据传递给后端 测试

AZK707的博客 1260

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jQuery简易留言板

我记得应该是改编的 但没找到。

Transparent_Mask的博客 799

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jQuery学习笔记--制作简易留言板

功能实现 点击发布,通过下滑方式展示留言。点击删除,通过上滑方式删除留言。没有本地存储,所以刷新之后会重置。 运行结果 代码实现 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>

努力追光的小王 4716

MVC框架简易留言板实例

MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。首先创建一个数据库use master --查看是否存在重名的数据库 if exists (select * from sysdatabases where name='Messages') drop database Messages --创...

伴之则暖的博客 5610

Jquery来制作简易版的留言板.

效果图: 代码如下: <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>制作留言板</title>

weixin_46409887的博客 3494

如何用jquery方法写留言版

留言板样式代码块 @charset 'utf-8'; /* 去除全局默认边距*/ * { margin: 0; padding: 0; } li { width: 100%; padding: 10px; list-style: none; display: flex; border-radius: 5px; border-bottom: 1px solid rgb(175, 58, 58); } ul { padding: 0p

Tone的博客 1834
上一篇: 利用 HtmlAgilityPack 抓取页面
linfei721
博客等级 码龄19年 9粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值