Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)归海一刀
published in(发表于) 2014/1/30 1:03:42
Response.write方法实现日历控件的方法参考_[Asp.Net教程]

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







If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759