.net mvc页面UI之Jquery博客日历控件实现代码

一、效果图

二、页面文件

页面上需要添加<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() - 2;

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 = 0; index < arr.length; index++) {

if (val == arr[index]) {

return index + 1;

}

}

return false;

}

//获取月份对应中文

function monthCn(month) {

var m = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);

return m[month];

}

//获取星期对应中文

function dayCn(day) {

var w = new Array('日', '一', '二', '三', '四', '五', '六');

return w[day];

}

//获取选择月对应的实际天数(也是本月的最后一天)

function getDates(year, month) {

var d = new Date(year, month, 0).getDate();

return d;

}

//选择月的上个月的记录第几天

function prevDay(year, month, date) {

var y = year;

var m = month - 1;

var d = -(date - 2);

var p = new Date(y, m, d).getDate();

return p;

}

//选择月的下个月的记录第几天

function nextDay(year, month, date) {

var y = year;

var m = month;

var d = 1;

var p = new Date(y, m, d).getDate();

return p;

}

//活动数组数据解析--日期

function jsonDate(data) {

var j = new Array();

for (var i = 0; i < data.length; i++) {

j.push(data[i].hDongD);

}

return j;

}

//活动数组数据解析--网址

function jsonUrl(data) {

var j = new Array();

for (var i = 0; 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, 1).getDay() + 1;

//获取选择月对应的实际天数(也是本月的最后一天)

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 = 1;      //记录第几天

var $dayTd = 1;     //记录第几天的TD

var $rowMax = Math.ceil((lDate + fDay - 1) / 7);  //总行数

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 = 0; i < 7; i++) {

html += '<td>' + dayCn(i) + '</td>';

}

html += '</tr>';

//显示日

for (var row = 1; row <= $rowMax; row++) {

html += '<tr>';

for (var col = 1; col <= 7; 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 - 1];

//如果有活动则使用活动样式并加上活动链接

if (dayIndex) {

//如果日期为当天则用红色加粗显示

if ($dayN == date && $nowMonth + 1 == 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 + 1 == 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 * 7 - ($dayN - 1)) - ($dayTd - 1);

for (var i = 0; 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: 0;

}

a {

text-decoration: none;

color: #666;

}

a:hover {

text-decoration: none;

}

/* ================================================================================ */

/* 日历Div全局样式 */

#cal {

width: 245px;

}

#cal_bottom {

padding: 2px;

border-top: 0;

text-align: right;

}

/* 日历Table样式 */

table {

border: 0;

border-collapse: collapse;

border-spacing: 0;

}

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: 100%;

height: 100%;

}

/* 当前日样式 */

.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 == 1 ? ("0" + 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=0;

output.Append("new Array(");

foreach (var cc in res)

{

if (i == 0)

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.jb51.net' },  { hDongD: 14, hDongUrl: 'http://play.jb51.net' });");

}

(0)

相关推荐

  • asp.net中日历函数Calendar的使用方法

    今天介绍的是微软提供的ajax calendar控件.这个控件使用了ajax的效果,并通过前台js和style设置事件和效果.功能丰富.样式自有,实为网站设计.mis开发之必备控件. 按照惯例,现在该贴代码了: <asp教程:textbox runat="server" id="txtcalendar" width="150" /> <ajaxtoolkit:calendarextender runat="server

  • 在ASP.NET中实现弹出日历的具体方法

    ctlCalendar.ascx的源代码: 复制代码 代码如下: <%@ Control Language="c#" AutoEventWireup="false" Codebehind="ctlCalendar.ascx.cs" Inherits="calendar.ctlCalendar" TargetSchema="http://schemas.microsoft.com/intellisense/ie5

  • ASP.NET中实现弹出日历示例

    在.net中弹出日历的方法有很多种,这里介绍直接使用.net来实例,我们当然还可以使用js日历来实例哦,下面我分别简单举两个实例吧.有需要的朋友可以了解一下. 代码如下: <%@ Control Language="c#" AutoEventWireup="false" Codebehind="ctlCalendar.ascx.cs" Inherits="calendar.ctlCalendar" TargetSchem

  • ASP.NET Calendar日历(日期)控件使用方法

    Calendar 控件显示一个日历,用户可通过该日历导航到任意一年的任意一天.当 ASP.NET 网页运行时,Calendar 控件以 HTML 表格的形式呈现.因此,该控件的许多属性与多种不同的表格格式相符.在这些属性中,有几个在一些低版本的浏览器中不能得到完全支持,因此在这些浏览器中并不能使用所有的格式功能. 使用 Calendar 控件在网页上显示日历的单个月.该控件使您可以选择日期并移到下个月或上个月.Calendar 控件支持 System.Globalization 命名空间中的所有

  • ASP.NET技巧:为Blog打造个性日历

    日历控件是.net自带的控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少.纵是好玉也仍需雕琢,为了使它更美观实用,我们还需要对它进行二次开发. 新建一个用户控件,把calender控件拉进来.第一步是外观设置,这个根据你的需要,只需对它的相关属性做一些调整即可.下图是我调整后的界面 属性设置如下: <asp:calendar id="Calendar1" CellPadding="2" Width="160px"

  • ASP.NET中日历控件和JS版日历控件的使用方法(第5节)

    今天小编带大家以做任务的形式了解ASP.NET中日历控件的使用方法,主要任务内容: 1.添加一个日历,设置日期以蓝色的完整名称显示,周末以黄色背景红色文字显示,而当前日期使用绿色背景显示,用户可以选择一天.一周或整个月,被选的天/周/月使用灰色背景色来显示.当选中一个日期后,把时间显示在下面的一个文本框中,效果如图所示: 2.设计一个注册页面,使用js日历控件帮助用户输入出生日期.效果如图所示: 学习项目一  Calendar日历控件 1.在站点下创建一个Calendar页面,并在页面上拖放一个

  • .net mvc页面UI之Jquery博客日历控件实现代码

    一.效果图 二.页面文件 页面上需要添加<div id="cal"></div>标记. 三.JS代码 复制代码 代码如下: // JavaScript 日历 $(document).ready(function () { //当前时间 $now = new Date();                      //当前的时间 $nowYear = $now.getFullYear();          //当前的年 $nowMonth = $now.get

  • jquery获取easyui日期控件的值实现方法

    jquery easyui日期控件中,在页面里用JS拿到设置的日期值的方法 jquery获取easyui日期控件的值 jquery easyui 日期框 有这样的一个日期文本框: <input type="text" name="mdate" size="20" value="" id="mdate" class="easyui-datebox"/> 使用easyui给文本框

  • jQuery密码强度验证控件使用详解

    本文实例为大家分享了jQuery密码强度验证控件,供大家参考,具体内容如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="jquery-1.12.1.js"></script>

  • jQuery操作表单常用控件方法小结

    本文实例总结了jQuery操作表单常用控件方法.分享给大家供大家参考.具体如下: 下面的JS代码列出了jQuery操作表单常用控件(包括select,radiobox,checkbox)的常用方法,相信一定有你需要的 操作radio的html代码 Radion <input type="radio" name="rd" id="rd1" checked="checked" value="rd1" /&

  • jquery获取点击控件的绝对位置简单实例

    在使用jquery的过程中,想取得当前点击input的绝对位置而去显示一个div,jquery本身提供offset和position这个两个方法,但position官方解释是relative to the offset parent,可以看到是针对父结点的,而offset官方解释relative to the document,貌似使用offset可以直接绝对定位.但是在网页中如果出现嵌套div的情况,top和left会叠加,因此这个时候如果要定位显示一个新的div就要把父亲结点的offset去

  • jquery通过扩展select控件实现支持enter或focus选择的方法

    本文实例讲述了jquery通过扩展select控件实现支持enter或focus选择的方法.分享给大家供大家参考,具体如下: /*************************************** * @ author jdkleo * @ date 2013/2/27 JQuery SelKeys USAGE: jQuery.selkeys.enter(jQuery("#selcon")); jQuery.selkeys.focus(jQuery("#selcon

  • jquery检测input checked 控件是否被选中的方法

    jquery检测input checked 控件是否被选中 js部分 复制代码 代码如下: function tongyianniu(){ var gouxuan=$('input[type=checkbox]').is(':checked'); alert(gouxuan); } html部分 复制代码 代码如下: <input type="button" id="btnRegister" onclick="tongyianniu();"

  • jQuery的时间datetime控件在AngularJs中的使用实例(分享)

    百度一下,自己也想了一下,有一种简单,无脑的方式分享给你: <input ng-model="start" id="start" placeholder="开始日期" style="width:156px;" class="form-control date-picker" data-date-format="yyyy-mm-dd" type="text">

  • JavaFx UI控件与代码间的绑定方法

    JavaFx初探一,UI控件的使用,具体内容如下 方式一:使用纯代码直接new view控件,这样就不涉及到与fxml文件之间的交互了 方式二:使用fxml编写界面文件,用可视化工具scene builder 来构建交互界面. 分两种方式绑定控件,可以用Android的方法在java中直接调用类似findviewbyId的方法,先在xml文件中设置fxid,然后根据id去找这个控件,代码如下 @Override public void start(Stage primaryStage) thro

  • node.js实现博客小爬虫的实例代码

    前言 爬虫,是一种自动获取网页内容的程序.是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化. 这篇文章介绍的是利用node.js实现博客小爬虫,核心的注释我都标注好了,可以自行理解,只需修改url和按照要趴的博客内部dom构造改一下filterchapters和filterchapters1就行了! 下面话不多说,直接来看实例代码 var http=require('http'); var Promise=require('Bluebird'); var cheeri

随机推荐