.net mvc页面UI之Jquery博客日历控件
摘要:最近在做一个博客系统,其他需要用到博客日历控件,网上搜索了很多资料,其中大部分都是javascript的,经过总结使用jquery实现了博客日历效果。代码如下:
原文链接转载请注明:http://www.kwstu.com/ArticleView/admin_2013916154649951
一、效果图

二、页面文件
页面上需要添加<div id="cal"></div>标记。
三、JS代码
// JavaScript 日历
$(document).ready(function () {
//当前时间
$now = new Date(); //当前的时间
$nowYear = $now.getFullYear(); //当前的年
$nowMonth = $now.getMonth(); //当前的月
$nowDate = $now.getDate(); //当前的日
$nowMonthCn = monthCn($nowMonth); //格式化后的月
//第一次设置当前时间
calOpt($now);
//上个月鼠标点击事件
$('#prevMonth').live('click', function () {
var year_text = $('.thisYear').text();
var month_text = $('.thisMonth').text() - ;
var date_text = $('.thisDate').text();
$('#cal').html('');
var d = new Date(year_text, month_text, date_text);
calOpt(d);
return false;
});
//下个月鼠标点击事件
$('#nextMonth').live('click', function () {
var year_text = $('.thisYear').text();
var month_text = $('.thisMonth').text();
var date_text = $('.thisDate').text();
$('#cal').html('');
var d = new Date(year_text, month_text, date_text);
calOpt(d);
return false;
});
//关闭日历鼠标点击事件
$('#cal_close').live('click', function () {
$('#cal').html('');
$('#cal').hide();
return false;
});
});
//是否在数组中?返回下标+1
function inArray(val, arr) {
for (var index = ; index < arr.length; index++) {
if (val == arr[index]) {
return index + ;
}
}
return false;
}
//获取月份对应中文
function monthCn(month) {
var m = new Array(, , , , , , , , , , , );
return m[month];
}
//获取星期对应中文
function dayCn(day) {
var w = new Array('日', '一', '二', '三', '四', '五', '六');
return w[day];
}
//获取选择月对应的实际天数(也是本月的最后一天)
function getDates(year, month) {
var d = new Date(year, month, ).getDate();
return d;
}
//选择月的上个月的记录第几天
function prevDay(year, month, date) {
var y = year;
var m = month - ;
var d = -(date - );
var p = new Date(y, m, d).getDate();
return p;
}
//选择月的下个月的记录第几天
function nextDay(year, month, date) {
var y = year;
var m = month;
var d = ;
var p = new Date(y, m, d).getDate();
return p;
}
//活动数组数据解析--日期
function jsonDate(data) {
var j = new Array();
for (var i = ; i < data.length; i++) {
j.push(data[i].hDongD);
}
return j;
}
//活动数组数据解析--网址
function jsonUrl(data) {
var j = new Array();
for (var i = ; i < data.length; i++) {
j.push(data[i].hDongUrl);
}
return j;
}
//设置日历参数
function calOpt(date) {
//获取选择系统时间
var $year = date.getFullYear(); //年
var $month = date.getMonth(); //月
var $date = date.getDate(); //日
var $day = date.getDay(); //星期
var $monthCn = monthCn($month); //格式化后的月
//获取选择月的第一天对应的星期数+1
var $fDay = new Date($year, $month, ).getDay() + ;
//获取选择月对应的实际天数(也是本月的最后一天)
var $lDate = getDates($year, $monthCn);
// alert('年:'+$year+'\n月:'+$monthCn+'\n日:'+$date+'\n选择月的第一天对应的星期数:'+$fDay+'\n选择月的最后一天:'+$lDate);
//获取活动数组数据并输出日历
//var test = new Array(
// { hDongD: 4, hDongUrl: 'http://www.ipiao.com' },
// { hDongD: 14, hDongUrl: 'http://www.1.com' }
//);
$.ajax({
type:'post',
url: "/PubConfig/getCalandDay",
data:{'year':$year,'month':$monthCn},
dataType:'json',
success: function (result) {
if(result == null){ //如果无活动数组数据,则声明一个空数据
result = new Array();
}
calShow($fDay, $lDate, $date, $monthCn, $year, eval(result));
},
error: function (XMLHttpRequest, textStatus, errorThrown) { //发送失败事件
alert(textStatus);
}
});
}
/*
输出日历
参数1:选择月的第一天对应的星期数+1;
参数2:选择月的最后一天;
参数3:选择的日;
参数4:选择的月;
参数5:选择的年;
参数6:活动数组数据;
*/
function calShow(fDay, lDate, date, monthCn, year, data) {
var $dayN = ; //记录第几天
var $dayTd = ; //记录第几天的TD
var $rowMax = Math.ceil((lDate + fDay - ) / ); //总行数
var $prev_dayN = prevDay(year, monthCn, fDay);//选择月的上个月的记录第几天
var $next_dayN = nextDay(year, monthCn, fDay);//选择月的上个月的记录第几天
//显示table>tr>th
html = '<table>';
html += '<tr><th colspan=7>';
html += '<a id="prevMonth" href=""> << </a> ';
html += '<span class="thisYear">' + year + '</span>年' + '<span class="thisMonth">' + monthCn + '</span>月<span class="thisDate">' + date + '</span>';
html += ' <a id="nextMonth" href=""> >> </a></th></tr>';
html += '</th></tr>';
//显示星期标题
html += '<tr>';
for (var i = ; i < ; i++) {
html += '<td>' + dayCn(i) + '</td>';
}
html += '</tr>';
//显示日
for (var row = ; row <= $rowMax; row++) {
html += '<tr>';
for (var col = ; col <= ; col++) {
if ($dayTd < fDay) {
html += '<td class="prev_dayN" dayn="' + $prev_dayN + '">' + $prev_dayN + '</td>';
$dayTd++;
$prev_dayN++;
} else {
var dayIndex = inArray($dayN, jsonDate(data));
var urlIndex = jsonUrl(data)[dayIndex - ];
//如果有活动则使用活动样式并加上活动链接
if (dayIndex) {
//如果日期为当天则用红色加粗显示
if ($dayN == date && $nowMonth + == monthCn && $nowYear == year) {
html += '<td class="activity now_date" dayn="' + $dayN + '" title="点击查看当天活动"><a href="' + urlIndex + '">' + $dayN + '</a></td>';
} else {
html += '<td class="activity" dayn="' + $dayN + '" title="点击查看当天活动"><a href="' + urlIndex + '">' + $dayN + '</a></td>';
}
} else {
//如果日期为当天则用红色加粗显示
if ($dayN == date && $nowMonth + == monthCn && $nowYear == year) {
html += '<td class="now_date" dayn="' + $dayN + '">' + $dayN + '</td>';
} else {
html += '<td dayn="' + $dayN + '">' + $dayN + '</td>';
}
}
$dayN++;
}
if ($dayN > lDate) {
var $next_dayNum = (row * - ($dayN - )) - ($dayTd - );
for (var i = ; i < $next_dayNum; $next_dayNum--) {
html += '<td class="next_dayN" dayn="' + $next_dayN + '">' + $next_dayN + '</td>';
$next_dayN++;
}
break;
}
}
html += '</tr>';
}
//结束输出table
html += '</table>';
html += '<div id="cal_bottom"><a id="cal_close" href="">关闭</a></div>';
$('#cal').append(html);
}
四、CSS文件
@CHARSET "UTF-8";
* {
list-style: none;
margin: 0px;
padding: 0px;
}
img {
border: ;
}
a {
text-decoration: none;
color: #;
}
a:hover {
text-decoration: none;
}
/* ================================================================================ */
/* 日历Div全局样式 */
#cal {
width: 245px;
}
#cal_bottom {
padding: 2px;
border-top: ;
text-align: right;
}
/* 日历Table样式 */
table {
border: ;
border-collapse: collapse;
border-spacing: ;
}
tr {
height: 30px;
line-height: 30px;
}
th {
font-weight: normal;
}
.thisDate {
display: none;
}
#prevMonth {
}
.nextMonth {
}
th a {
display: inline-block;
vertical-align: 1px;
}
td {
width: 35px;
text-align: center;
}
td a {
display: inline-block;
width: %;
height: %;
}
/* 当前日样式 */
.now_date {
background: #BBB;
}
/* 月前,月后样式 */
.prev_dayN, .next_dayN {
color: #CCC;
}
/* 活动数据样式 */
.activity {
}
.activity a {
color: #2F76AC;
text-decoration: underline;
}
五、后台代码
//日历控件获取当前月发布文章的天
public ActionResult getCalandDay(string year, string month)
{
string userId = getBlogUserId();
StringBuilder output = new StringBuilder("");
DateTime dt = System.DateTime.Now;
string curMonth = year.ToString() + (month.Length == ? ("" + month) : month);
var res = db.Database.SqlQuery<CurMonthArticleViewModel>("select id,createtime from article where mid='" + userId + "' and to_char(createtime,'YYYYMM')='" + curMonth + "'").ToList();
int i=;
output.Append("new Array(");
foreach (var cc in res)
{
if (i == )
output.Append("{ hDongD:"+cc.CREATETIME.Day+", hDongUrl: '"+cc.ID+"' }");
else
{
string curDay = cc.CREATETIME.Day.ToString();
string resultDay = output.ToString();
string[] str = resultDay.Split(','); //得到一个str的数组{“1”,”2“,“3”,”4“,“5”,”6“}
Boolean c = true;
foreach (string s in str)
{
if (s == curDay) c = false;
}
if (c)
{
output.Append(",{ hDongD:" + cc.CREATETIME.Day + ", hDongUrl: '/" + cc.ID + "--" + cc.CREATETIME + "' }");
}
}
i++;
}
output.Append(");");
return Json(output.ToString());
//return Json("new Array({ hDongD: 4, hDongUrl: 'http://www.ipiao.com' }, { hDongD: 14, hDongUrl: 'http://www.1.com' });");
}
.net mvc页面UI之Jquery博客日历控件的更多相关文章
- ASP.NET MVC页面UI之联动下拉选择控件(省、市、县联动选择)
地区选择操作在WEB应用中比较常见的操作,本文在.net mvc3下实现了省市县三级联动选择功能. 本文博客出处:http://www.kwstu.com/ArticleView/admin_2013 ...
- jquery博客收集的IE6中CSS常见BUG全集及解决方案
今天的样式调的纠结,一会这边一会那么把jquery博客折腾的头大,浏览器兼容性.晚上闲着收集一些常见IE6中的BUG 3像素问题及解决办法 当使用float浮动容器后,在IE6下会产生3px的空隙,有 ...
- JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客
JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客https://blog.csdn.net/KooKing_L/article/details/79711379
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
博客分类: jquery-easyui jQueryAjax框架HTML 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...
- 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”
接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...
- jQuery 日历控件 FullCalendar 初识
最近有个日程管理的需求,就学习了一下 FullCalendar 控件的一些基本知识,本文不是详细介绍该控件的 API 的文档,而是记录本人使用过程中的一些学习情况. 先看一下效果图 月/周/日视图 ...
- jquery的上传控件uploadly,每行都有一个这样的控件对id选择器的使用
1.先看看预览图 这个是我的页面,其中如果我没点击添加一行的时候,会把本来有的数据进行循环出来,这个时候每个记录都必须有个上传图片的按钮,但是jquery的uploadly这个控件只是锁定id的,至少 ...
- jquery插件——日历控件
今天在网上有看到一个jquery插件——日历控件,不过之前也在柯乐义的网站上看到了(http://keleyi.com/ 推荐下) 这个插件看着比较大气,所以干脆也分享下,以后自己也好用一点儿 1.页 ...
- mvc 日历控件
第二个是日历控件,在网上查了一个普通的日历控件,也生成了下拉的日历样子,但是一些脚本比如选择年月,需要一些时间,最后只好套用了My97 DatePicker,这样以来其实简单多了. 第一步:下载 My ...
随机推荐
- 基于 Android 的 3D 视频样本代码
作者:Mark Liu 下载样本代码 简单介绍 在Android 中,创建一个可以播放视频剪辑的应用很easy:创建一个採用 3D 图形平面的游戏应用也很easy.可是,创建一个可以在 3D 图形对象 ...
- 无废话WCF入门教程三[WCF的宿主]
一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...
- Linux C/C++计划Shell命令大杂烩(1)
1, 请参见发行信息 cat /etc/issue 2, 查看内核版本号 uname -r 查看内核版本号 uname -p 查看处理器类型32bit/64bit uname -n 查看网络主机名(o ...
- 【百度地图API】情人节求爱大作战——添加标注功能
原文:[百度地图API]情人节求爱大作战--添加标注功能 任务描述: 2月2日是除夕,2月14立马来!即将到来的情人节,你想送TA一份什么礼物呢? 不如,在你们居住的地方,画个大大的桃心,表达你对TA ...
- 【百度地图API1.1】修改文本标注的样式
原文:[百度地图API1.1]修改文本标注的样式 百度地图API1.0中文本标注的样式写法为: label.getDom().style.borderColor = "#808080&quo ...
- js checkbox多选值采集
var objs = document.getElementsByTagName("input"); for (var i = 0; i < objs.length; i++ ...
- Java泛型解析(03):虚拟机运行泛型代码
Java泛型解析(03):虚拟机运行泛型代码 Java虚拟机是不存在泛型类型对象的,全部的对象都属于普通类,甚至在泛型实现的早起版本号中,可以将使用泛型的程序编译为在1.0虚拟机上可以执行的 ...
- cform 开发框架介绍
CForm是从2012年开始研发的一套灵活,易用,简单,成熟的中小型应用系统开发框架.目前已成功应用在浙江大学.温州科技职业学院.广西农业局.青岛市农业局.乐清妇保院.老博会.婚尚起义结婚网等单位. ...
- ASP.NET中 RegularExpressValidator(正则验证)的使用
原文:ASP.NET中 RegularExpressValidator(正则验证)的使用 ylbtech-ASP.NET-Control-Validator: RegularExpressValida ...
- 快速构建Windows 8风格应用35-触控输入
原文:快速构建Windows 8风格应用35-触控输入 引用 Windows 8设备通常具有多点触摸屏,用户可以同时使用多个手指来进行不同的输入交互,如点击.拖动或收缩等手势操作.另外Windows ...