Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)归海一刀published in(发表于) 2014/1/30 1:03:42 Response.write方法实现日历控件的方法参考_[Asp.Net教程]
在asp.net开发当中,微软给我们很多的控件,让我们非常迅速的开发,并且做出非常理想的效果,并且,效率也是非常不错的,在中小开发中,控件能解决很多的问题,同时,这些控件对我们开发人员来说,应该算是比较隐蔽的,所以我们对他的内部函数和解构都不太了解,所以很多时候也会带来麻烦.
比如我在开发这个blog的时候,演示地址: http://www.shangducms.cn/soundbbg 就会有一些问题..因为在设计的时候,不是通过前台控件的拖放来实现,而是通过变量来实现的.比如 template= "...代码",我认为,这样对变量执行缓存,可以简单的和快速的执行页面,如果我将这个变量放到缓存中,打开后用response.write写出来,可能效率会更高,而不用重复读数据库.(对于数据量大还没研究过,希望有高人指点)
那么写控件好像不太现实,因为就算写是实现不了的..那么用js实现好吗? 我们通过前面的一篇关于效率的文章可以看到,js其实对内存和cpu使用是比较大的,我看了一些html页面的组件,决定自己写一个代码.
这里是变量(调用)的代码
template += "日历";template += "";template = get_cat(DateTime.Now,template);template += "";我们在函数中,只要获取当前月份的月,和号,datatime可以很方便,再计算已经过了多少天,比如今天是22号,那么1号也可以重载算出来比如今天是11月22号,那么11月有30天,那么我们找到1号,从1号开始循环到30号 循环30次,而22号高亮就可以了..
protected string get_cat(DateTime time,string tem) { int d = time.Day; int m = time.Month; int y = time.Year; int[] a=new int[50]; int now; int m_long; int count = 1; tem += " <- "; tem += y + "年"+m+"月"; tem += "-> ";
tem += "星期日星期一星期二星期三星期四星期五星期六";
now = get_day(Convert.ToDateTime(y+"-"+m+"-1")); m_long = get_month_long(m);
for (int x = 0; x < 50; x++) { if (x < now) { a[x] = 0; } else if (x > m_long+now-1) { a[x] = 0; } else { a[x] += count; count++; } }
for (int k = 0; k < 6; k++) { tem += ""; for (int i = k*7; i < k*7+7; i++) { if (a[i] != 0) { if (a[i].ToString() == DateTime.Now.Day.ToString()) { tem += "" + a[i] + ""; } else { tem += "" + a[i] + ""; } } else { tem += ""; } } tem += ""; } tem += "";
return tem; }当然我还需要知道当前的月份的长度当前时间
//获取当前时间的日期,星期几. protected int get_day(DateTime time) { int d = time.Day; int m = time.Month; int y = time.Year; int week; int weekstr=0;
if (m == 1 || m == 2) { m += 12; y--; } week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
switch (week) { case 0: weekstr = 1; break; case 1: weekstr = 2; break; case 2: weekstr = 3; break; case 3: weekstr = 4; break; case 4: weekstr = 5; break; case 5: weekstr = 6; break; case 6: weekstr = 7; break; } return weekstr; }
protected int get_month_long(int i) { int weekstr=0;
switch (i) { case 1: weekstr = 31; break; case 2: weekstr = 28; break; case 3: weekstr = 31; break; case 4: weekstr = 30; break; case 5: weekstr = 31; break; case 6: weekstr = 30; break; case 7: weekstr = 31; break; case 8: weekstr = 31; break; case 9: weekstr = 30; break; case 10: weekstr = 31; break; case 11: weekstr = 30; break; case 12: weekstr = 31; break; }
return weekstr; }然后就可以实现一个简单的html日历组件了
在page_load里执行 response.write(template);就可以看到模板了
在编写模板的时候,这里的模板可以想象成一个页面的实现.比如html代码都用response.write形式输出的话,很多控件就无法使用,前一段时间有个朋友一直在苦恼这个,而我也刚好遇到了这个,这只是个简单的实现,当然在效率上还有待加强,不过提出这个算是一个思路罢了.
来源:cnblogs
赞