2011年7月20日 #
2011年7月13日 #
2011年6月26日 #
jquery技巧总结 |
| 浏览:34155 2007-11-19 10:10 来自 【组长】wilensky : jquery技巧总结 |
我把这篇文章分了几个子类使得大家更加方便浏览阅读
- Web开发工具
- web排版工具
- 浏览器工具
- 网站分析工具
- 提高效率工具
ProCssor是一个很有实用价值的web工具,它能够有效帮助你快速美化并且格式化CSS文件。
地址:http://procssor.com
ScriptSrc.net
是不是厌倦了搜索最新类库脚本对应标签?ScriptSrc可以帮助你拷贝最新的类库(jQuery,
MooTools,YUI...),如下:
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
地址:http://scriptsrc.net/
HTMLform.com
使用HTMLform.com后,你唯一要做的就是设计你的HTML表单,你将得到一个很容易就安装到服务器上的zip文件。一个很容易就嵌入网页的表单。一个简单但是很强大的数据库用以满足你的需求。并且拥有工具查询在线数据并且可以导出到excel和csv。
译者提醒:只支持PHP的服务器,你要用别的技术,还是掠过吧。
地址:http://htmlform.com/
Spritebox
Spritebox是一个所见即所得的工具,用来快速从一个sprite图片创建CSS的class和ID。
地址:http://www.spritebox.net/
HTML Purifier
HTMLPurifier是一个PHP开发的标准HTML兼容工具。它不但能够删除所有的恶意代码,保证代码安全性,同事能够监测你的代码的兼容性。
地址:http://htmlpurifier.org/
Tiny Fluid Grid
Tiny fluid grid是一个非常简单的CSS
Grid生成器,只有1kb,包括一个index.html文件和demo代码,并且grid.css包括了你创建grid的CSS。
地址:http://www.tinyfluidgrid.com
TABLEIZER!
TABLEIZER!是一个快速由电子数据表创建HTML table的工具。
地址:http://tableizer.journalistopia.com/
Try Ruby! (in
your browser)
如果你没有使用过Ruby,那么试试TryRuby吧!你可以快速简单的尝试Ruby教程并且在线测试你的学习成果!
地址:http://tryruby.org/
Plupload
Plupload允许你使用HTML5 Gears, Silverlight, Flash,
BrowserPlus或者一般表单来上传文件,提供一些特别的特性比如,上传进度显示,改变图片大小,批量上传等
地址:http://www.plupload.com/
Favigen: Favicon
Generator
地址:http://favigen.com/
Super Conversion Button
创建一个及时响应的Button是web开发中很重要的环节,使用这个工具能快速的生成一个漂亮的Button
地址:http://www.performable.com/buttons/
Subfolio
Subfolio是一个使用创新的方式在线分享的工具,可以公开也可以是私密,它对于自由职业者,工作室,代理处,企业甚至是教室来说都非常方便。
地址:http://subfolio.com/
jsFiddle
jsFiddle是web开发人员的在线分享工具,可以提供在线的编辑器服务,你可以使用它来和你的朋友,同事分享前台开发的问题和解决方法。它提供了CSS,javascript,html的在线编辑及其显示功能。代码可以在线分享,很方便开发人员在blog和论坛上分享或者解决问题
地址:http://www.jsfiddle.net/
A/B Split Testing
Calculator
地址:http://www.performable.com/calculator/
Frame Box -
Lightweight online tool for creating mockups
Frame Box 并不具有很多扩展的功能,你可以拖拽,改变大小,拷贝粘贴
UI的设计。我最喜欢它的地方在于它可以用来快速设计程序原型。
地址:http://framebox.org/
App
Inventor for Android
使用Anddroid App
inventor,你不需要专业的开发人员,无须开发代码,你只需要设计界面,使用block来指定程序的行为
地址:http://appinventor.googlelabs.com/about/
HTML-Ipsum
HTML Ipsum的伟大之处在于它给你标准的HTML的程序片段帮助你测试你的CSS
地址:http://html-ipsum.com/
CSS3 Button Maker
地址:http://css-tricks.com/css3-button-maker/
CSS3 Click
Chart by Impressive Webs
每一个CSS3 点击 图表都会显示一个CSS3特性,并且一个可点击的标题,点击后在低端会出现特性的具体信息
地址: http://www.impressivewebs.com/css3-click-chart/
CSS3
Generator
CSS3生成器能够帮助你生成CSS3属性,例如,@fontface,border-radius,
multi-column...
地址:http://css3generator.com/
在过去的开发过程中我们保存了大量的资源和工具用来提高web及其移动开发,这些工具能有效的提高你的开发流程,及其资源,并且保证代码的清晰,或者能有效提高你和你的同事的合作,如此多的工具中,我选择了50个最喜欢的工具分享给大家。
我把这篇文章分了几个子类使得大家更加方便浏览阅读:
- Web开发工具
- web排版工具
- 浏览器工具
- 网站分析工具
- 提高效率工具
Web开发工具ProcCSSor - 高级CSS美化工具![]()
ProCssor是一个很有实用价值的web工具,它能够有效帮助你快速美化并且格式化CSS文件。
地址:http://procssor.com
ScriptSrc.net![]()
是不是厌倦了搜索最新类库脚本对应标签?ScriptSrc可以帮助你拷贝最新的类库(jQuery,
MooTools,YUI...),如下:
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
地址:http://scriptsrc.net/
HTMLform.com![]()
使用HTMLform.com后,你唯一要做的就是设计你的HTML表单,你将得到一个很容易就安装到服务器上的zip文件。一个很容易就嵌入网页的表单。一个简单但是很强大的数据库用以满足你的需求。并且拥有工具查询在线数据并且可以导出到excel和csv。
译者提醒:只支持PHP的服务器,你要用别的技术,还是掠过吧。
地址:http://htmlform.com/
Spritebox![]()
Spritebox是一个所见即所得的工具,用来快速从一个sprite图片创建CSS的class和ID。
地址:http://www.spritebox.net/
HTML Purifier![]()
HTMLPurifier是一个PHP开发的标准HTML兼容工具。它不但能够删除所有的恶意代码,保证代码安全性,同事能够监测你的代码的兼容性。
地址:http://htmlpurifier.org/
Tiny Fluid Grid![]()
Tiny fluid grid是一个非常简单的CSS
Grid生成器,只有1kb,包括一个index.html文件和demo代码,并且grid.css包括了你创建grid的CSS。
地址:http://www.tinyfluidgrid.com
TABLEIZER!![]()
TABLEIZER!是一个快速由电子数据表创建HTML table的工具。
地址:http://tableizer.journalistopia.com/
Try Ruby! (in
your browser)![]()
如果你没有使用过Ruby,那么试试TryRuby吧!你可以快速简单的尝试Ruby教程并且在线测试你的学习成果!
地址:http://tryruby.org/
Plupload![]()
Plupload允许你使用HTML5 Gears, Silverlight, Flash,
BrowserPlus或者一般表单来上传文件,提供一些特别的特性比如,上传进度显示,改变图片大小,批量上传等
地址:http://www.plupload.com/
Favigen: Favicon
Generator![]()
地址:http://favigen.com/
Super Conversion Button![]()
创建一个及时响应的Button是web开发中很重要的环节,使用这个工具能快速的生成一个漂亮的Button
地址:http://www.performable.com/buttons/
Subfolio![]()
Subfolio是一个使用创新的方式在线分享的工具,可以公开也可以是私密,它对于自由职业者,工作室,代理处,企业甚至是教室来说都非常方便。
地址:http://subfolio.com/
jsFiddle![]()
jsFiddle是web开发人员的在线分享工具,可以提供在线的编辑器服务,你可以使用它来和你的朋友,同事分享前台开发的问题和解决方法。它提供了CSS,javascript,html的在线编辑及其显示功能。代码可以在线分享,很方便开发人员在blog和论坛上分享或者解决问题
地址:http://www.jsfiddle.net/
A/B Split Testing
Calculator![]()
地址:http://www.performable.com/calculator/
Frame Box -
Lightweight online tool for creating mockups![]()
Frame Box 并不具有很多扩展的功能,你可以拖拽,改变大小,拷贝粘贴
UI的设计。我最喜欢它的地方在于它可以用来快速设计程序原型。
地址:http://framebox.org/
App
Inventor for Android![]()
使用Anddroid App
inventor,你不需要专业的开发人员,无须开发代码,你只需要设计界面,使用block来指定程序的行为
地址:http://appinventor.googlelabs.com/about/
HTML-Ipsum![]()
HTML Ipsum的伟大之处在于它给你标准的HTML的程序片段帮助你测试你的CSS
地址:http://html-ipsum.com/
CSS3 Button Maker![]()
地址:http://css-tricks.com/css3-button-maker/
CSS3 Click
Chart by Impressive Webs![]()
每一个CSS3 点击 图表都会显示一个CSS3特性,并且一个可点击的标题,点击后在低端会出现特性的具体信息
地址: http://www.impressivewebs.com/css3-click-chart/
CSS3
Generator![]()
CSS3生成器能够帮助你生成CSS3属性,例如,@fontface,border-radius,
multi-column...
地址:http://css3generator.com/
50个web设计及开发人员使用的免费工具和应用
[url=http://css3generator.com/][/url]
我们在程序里面,经常会看到if(!IsPostBack){}这样的句子,那么,PostBack是起到什么作用呢?
PostBack的意思是回发,我们可以把他理解成第二次执行该程序。如果你还不是很理解的话,看看下面的例子:
1.我们向页面中添加一个dropdownlist,一个textbox,一个button控件,在.CS里写如下代码
protected void Page_Load(object sender,
EventArgs e)
{
this.DropDownList1.Items.Add("aaaaa");
this.DropDownList1.Items.Add("bbbbb");
}
protected void
Button1_Click(object sender, EventArgs e)
{
this.DropDownList1.Items.Add(this.TextBox1.Text);
}
运行程序,在textbox中输入ccccc第一次点button,dropdownlist中会添加text中的文本,那么,如果你第二次
button,你猜你会得到什么结果?是的,出现了两次的aaaaa,bbbbb,aaaaa,bbbbb,ccccc。所以,通常我们就用
PostBack来处理这个问题。
2.protected void Page_Load(object sender,
EventArgs e)
{
if (!IsPostBack)
{
this.DropDownList1.Items.Add("aaaaa");
this.DropDownList1.Items.Add("bbbbb");
}
}
protected void
Button1_Click(object sender, EventArgs e)
{
this.DropDownList1.Items.Add(this.TextBox1.Text);
}
运行,Oh
Yeah,是不是可以咯,咯咯,明白了postBack的用处了把。
那么,什么是AutoPostBack呢?AutoPostBack是一种机制(自动根据Web控件的一些事件,将页面自动发回服务器。在一些Web控件中,称为auto post
back属性。如果设置为true ,当此控件的某事件发生时,将发送一个request到服务器。
例如:
DropDdownList(Combo box)控件的属性AutoPostBack。如果我们将其设置为true
,当用户在组合框中选择不同的值时,被触发的事件将发送一个request给服务器。
为什么我们需要发送请求到服务器?
在此情况下的网页一般是用来输入用户信息的。该网页包含两个组合框控件:国家和城市。当用户选择某国,适当的城市应该显示到另一组合框,当然这一般是从数据库加载。为实现这一要求,我们可以设置国家组合框的AutoPostBack属性为true
。如果我们这样做,当国家组合框触发了事件,那么将有一request发送给服务器,而此时,可执行一次,我们预先写好的根据国家值从数据库读取适当的城市值。
根据上面的理解,我的理解是,AutoPostBack是用在一个控件中的值变换会带来另一个控件值变换时,需要设置为true,它的AutoPostBack属性默认为False,如果不把属性改为
True,他的SelectedIndexChanged()事件中的代码就不会执行(SelectedIndexChanged()是选控件中的项所触发的事件)。不过话说回来,频繁的回到服务器是一种非常不好的用户体验,所以现在又使用ajax,,呵呵。
2011年6月19日 #
这里我将NorthWind数据库的Category表显示出来,接着我们要是实现以下三个功能:
1、将GridView中满足CategoryID为偶数的数据行背景色改为Silver;
2、当鼠标滑过GridView中的数据行是,该数据行的颜色变为黄色,且数据字体加粗。鼠标离开行时,还原初始状态;
3、当点击GridView中的行时,行的颜色花生变化,且鼠标的形状变为手型。
GridView 控件中将数据行绑定到数据时发生。
在其中添加以下代码:
//这里我们将对NorthWind数据库的Category表进行操作
protected
void GridView1_RowDataBound(object sender, GridViewRowEventArgs
e)
{
//将CategoryID为偶数的行设为银色(Silver)
if (e.Row.RowType == DataControlRowType.DataRow)
{
//判定当前的行是否为数据行(即类型是否为DataRow)
int cid =
Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "CategoryID"));
//获取当前行的CategoryID列的值
if (cid % 2 == 00)
e.Row.BackColor = Color.Silver;
}
//设置鼠标滑过,行变色的效果
if
(e.Row.RowType == DataControlRowType.DataRow)
{
//当鼠标放上去的时候
先保存当前行的背景颜色 并设置新的背景色
e.Row.Attributes.Add("onmouseover",
"currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow';
this.style.fontWeight='bold';");
//当鼠标离开的时候 将背景颜色恢复成之前的颜色
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor;
this.style.fontWeight='';");
}
//设置鼠标点击,行变色、鼠标指针变成手状的效果
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick", "this.style.backgroundColor='#99cc00';
this.style.cursor='hand';");
}
}
另外:
FF,IE区别---手型指针
手型指针有cursor:hand和cursor:pointer两种写法,其中cursor:hand在ff中不支持,返回错误!
只要使用cursor:pointer即可,ff和ie都支持!
现在从对ASP.NET页面的执行顺序开始,体会一下B/S结构的程序的特点,下图是ASP.NET页面的执行顺序说明:
Page_Init(页面初始化引发的事件)——>Page_Load(加载页面时引发的事件)——>Control Event(服务器控件引发的事件)——>Page_UnLoad(页面从内存中卸载时引发的事件)
Page_Init和Page_UnLoad不常用,但是这里还是要说明一下。Page_Init和Page_Load事件区别在于,只有后者才能完全加载控件,绑定数据,虽然你可以在Page_Init中访问控件,但是其viewstate都不会被加载,所以此时控件中只拥有默认值。
这里说到了viewstate,我们先来做一个大致的了解——其实在ASP.NET中有两个viewstate。一个是控件本身的,用来维护控件自己的一些状态,比如说某个空间有变色的功能,它的viewstate就维护这个功能,这个viewstate是不能被用户访问的。相信自己写过控件的朋友都会有这样的感觉,自己写控件当然也要用自己的一个viewstate来维护这个控件的状态;而另外一个viewstate,是用户使用的,这个viewstate 和Session几乎一模一样,必须要先对其进行定义,才能使用。
每当点击ASP.NET的Web网页上的Button、 LinkButton或ImageButton等控件时,表单就会被发送到服务器上。如果某些控件的AutoPostBack属性被设置为true,那么当该控件的状态被改变后,也会使表单会发送回服务器。?(AutoPostBack属性,它只有两个bool值,true/false。如果这个属性被设置成false,那么点击后就不会立刻将变化传给服务器处理,也就不会有该控件的SelectedIndexChanged事件。)
每次当表单被发送回服务器,就会被重新加载,启动Page_Load事件,执行Page_Load事件处理程序中的所有代码(注意,是每次都会执行!)。
很显然把网页的初始化代码放在这里是最合适不过。我们经常会希望在每次加载网页时执行一些代码,如一些控件的数据绑定。
当我们希望只有在网页第一次加载时执行另一些代码(基本上都是数据的默认绑定),甚至希望一些代码在除首次加载外的每次加载时执行。那么我们可以利用 IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如果网页因回送而被重新加载,IsPostBack属性的值就会被设置为true。
在ASP.NET应用程序中,如果需要在页面第一次显示时执行一些初始化操作,必须判断IsPostBack属性!
在ASP.NET使用Page.IsPostback,那么就可以避免往返行程上的额外工作:如果处理服务器控件回发,通常需要在第一次请求页时执行代码,该代码不同于激发事件时用于往返行程的代码。如果检查?Page.IsPostBack?属性,则代码可按条件执行,具体取决于是否有对页的初始请求或对服务器控件事件的响应。这样做似乎很明显,但实际上可以忽略此项检查而不更改页的行为。该属性用的好坏,直接关系到你程序运行是否按照你最初的意愿,也关系到整个页面的效率。因为,如果每次都会给控件绑定数据,不管你是第一次访问,还是提交了数据以后,那么这个页面程序的效率可想而知。
一个B/S结构的页面每一次提交,它都会重新从头到尾执行一次。而C/S结构的程序就不会这样,这是和C/S结构的程序最大的区别!? 其实,得不到控件的数据,都是因为这个原因。
__doPostBack作为在asp.net中一个很重要的部分,有必要深入了解一下__doPostBack的来龙去脉的.其实,__doPostBack是一个很简单的JS function.代码如下:
__doPostBack
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
因为最终呈现给浏览器的内容都是html内容,采用asp.net技术也不能例外.要实现webcontrol的postback机制.只能在原来的submit上做文章.ms呈现给我们的,就是这种精巧的思维!
我看到,asp.net现在页面上添加了两个hidden input,这两个input分别用来存放触发postback的control的ID和参数.这就是我们大部分人认识到的:
__doPostBack(obj1,obj2)的第一个参数是控件ID,第二个参数是postback的参数.然后就可以在后台用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控件ID和参数.
很简单就实现了看似很神奇,以为内部有什么高深的处理的过程!如此轻巧的实现了asp.net的postback机制,佩服佩服!只要我们看懂了上边的代码,对__doPostBack的使用就应该不是什么难事了.可以说__doPostBack就是这么简单的一回事.-_-||
不过,另外要注意的就是asp.net的webcontrols中,Button和ImgButton是异类,它们不是利用__doPostBack来实现postback的.为什么这样,可能因为Button在html中本来就是有触发submit事件的功能吧.asp.net不过是要令原来html中一些不能触发submit的东西submit,才弄出了__doPostBack来实现.对于原来就能submit的Button,又何必多此一举呢.(仅个人理解,未经验证!)
所以如果是Button的postback,在后台是不能用Request.Form["__EVENTTARGET"]和Request.Form["__EVENTARGUMENT"]取得控件ID和参数的.那么,怎么取呢?看代码:
取Button
foreach (string str in Request.Form)
{
Control c = Page.FindControl(str);
if (c is Button)
{
control = c;
break;
}
}
如上写法可以在后台找到Button.为什么这样? 不知道,呵呵. 在Button的提交过程中,Button会将Button本身的ID作为Request.Form的一个Key,它的Value是Button的Text属性值,回传给服务器.所以可以在后台循环Form.Keys取到所提交的Button,以执行相应的函数.ImgButton也差不多,不同就在于,它不是用ImageButton的ID作为Request.Form的Key,它是用ImageButton的ID加上.x和.y作为Key,在Request.Form添加两上键值对,这两个键值应该是对应ImageButton的图片大小的,了解了这个规律后,我们仍然可以通过一定的方式得到是否是由ImageButton引发的PostBack.
了解Postback机制对我们理解asp.net的事件触发过程有很大的帮助,好好利用__doPostBack更能灵活的使客户端和服务器端进行交互,获得更好的客户体验.
PostBack英文解释:Post-发送至服务器,Back-并返回结果。IsPostBack=true,说明当前的操作信息发送至服务器,并要在本页面得到结果;IsPostBack=false,在代码中的真正意思是:本页面没有主动向服务器发送请求,只是服务器接收到浏览器或其他应用的请求而第一次跳转至本页面,这样,在实际应用中我们可以用if(!IsPostBack){}来实现首次加载本页面需要做的,而之后在本页面进行postback操作不能做的事。
每当点击Web网页上的Button、LinkButton或ImageButton控件时,表单就会被发送到服务器上。如果控件的AutoPostBack属性被设置为true,如果CheckBox、CheckBoxList等控件的状态被改变后,也会使表单会发送回服务器。
每次当表单被发送回服务器,就会被重新加载,启动Page_Load事件,执行Page_Load事件处理程序中的所有代码。把网页的初始化代码放在这里是最合适不过的了。我们经常会希望在每次加载网页时执行一些代码,而希望只有在网页第一次加载时执行另一些代码,甚至希望一些代码在除首次加载外的每次加载时执行。
可以利用IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如果网页因回送而被重新加载,IsPostBack属性的值就会被设置为true。通过测试,可以在任意时候执行指定的代码。下面是相关的C#代码:
protected void Page_Load(Object sender, EventArgs e)
{
// 网页每次加载时,执行的一些操作
if (!IsPostBack)
{
// 网页第一次加载时执行的操作
}
else
{
// 回送时执行的操作
}
// 网页每次加载时执行的操作
}
我们希望尽量不引起回送(每次回送都会要求服务器进行一系列的操作),即使引起回送后。也希望能够执行尽量少的操作。大规模、浪费时间的操作(例如数据库查找)尤其应当避免,因为它们能够延长应用程序的响应时间。
method="post"和method="get"指定提交的方式,在FORM提交的时候,如果不指定Method,则默认为GET请求
表单提交中Get和Post方式的区别有5点
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。
Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response
Body)中的,而是存放于HTTP响应头(Response
Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们可以从:
[系统盘]:\Documents and
Settings\[用户名]\Cookies目录中找到存储的Cookie;自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request
Header)了。
有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。
与Cookie相对的一个解决方案是Session,它是通过服务器来保持状态的。由于Session这个词汇包含的语义很多,因此需要在这里明确一下
Session的含义。首先,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个
Session。从这个语义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。从这个语义出发,我们则会提到往Session中存放什么内容,如何根据键值从
Session中获取匹配的内容等。
要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session
id,而这个Session
id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session
id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session
id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。有关Session的内容还比较多,在以后的Post中,我还将继续讲述。
综上所述,HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。
HyperLinkColumn有个属性Target,将器值设置成"_blank"即可.(Target="_blank")
【ASPNETMENU】点击菜单项弹出新窗口
在你的menuData.xml文件的菜单项中加入URLTarget="_blank",如:
<?xml version="1.0" encoding="GB2312"?>
<MenuData
ImagesBaseURL="images/">
<MenuGroup>
<MenuItem Label="内参信息"
URL="Infomation.aspx" >
<MenuGroup ID="BBC">
<MenuItem Label="公告信息"
URL="Infomation.aspx" URLTarget="_blank" LeftIcon="file.gif"/>
<MenuItem
Label="编制信息简报" URL="NewInfo.aspx" LeftIcon="file.gif" />
......
最好将你的aspnetmenu升级到1.2版
21.读取DataGrid控件TextBox值
foreach(DataGrid dgi in yourDataGrid.Items)
{
TextBox tb =
(TextBox)dgi.FindControl("yourTextBoxId");
tb.Text....
}
22.在DataGrid中有3个模板列包含Textbox分别为 DG_ShuLiang (数量)
DG_DanJian(单价) DG_JinE(金额)分别在5.6.7列,要求在录入数量及单价的时候自动算出金额即:数量*单价=金额还要求录入时限制为
数值型.我如何用客户端脚本实现这个功能?
〖思归〗
<asp:TemplateColumn HeaderText="数量">
<ItemTemplate>
<asp:TextBox
id="ShuLiang" runat=’server’ Text=’<%#
DataBinder.Eval(Container.DataItem,"DG_ShuLiang")%>’
onkeyup="javascript:DoCal()"
/><asp:RegularExpressionValidator id="revS" runat="server"
ControlToValidate="ShuLiang" ErrorMessage="must be integer"
ValidationExpression="^\d+$" />
</ItemTemplate>
</asp:TemplateColumn><asp:TemplateColumn HeaderText="单价">
<ItemTemplate>
<asp:TextBox
id="DanJian" runat=’server’ Text=’<%#
DataBinder.Eval(Container.DataItem,"DG_DanJian")%>’
onkeyup="javascript:DoCal()"
/><asp:RegularExpressionValidator id="revS2" runat="server"
ControlToValidate="DanJian" ErrorMessage="must be numeric"
ValidationExpression="^\d+(\.\d*)?$" /></ItemTemplate>
</asp:TemplateColumn><asp:TemplateColumn HeaderText="金额">
<ItemTemplate>
<asp:TextBox
id="JinE" runat=’server’ Text=’<%#
DataBinder.Eval(Container.DataItem,"DG_JinE")%>’ />
</ItemTemplate>
</asp:TemplateColumn><script language="javascript">
function DoCal()
{
var e = event.srcElement;
var row = e.parentNode.parentNode;
var txts = row.all.tags("INPUT");
if (!txts.length || txts.length < 3)
return;var q = txts[txts.length-3].value;
var p =
txts[txts.length-2].value;if (isNaN(q) || isNaN(p))
return;q = parseInt(q);
p = parseFloat(p);txts[txts.length-1].value = (q * p).toFixed(2);
}
</script>
23.datagrid选定比较底下的行时,为什么总是刷新一下,然后就滚动到了最上面,刚才选定的行因屏幕的关系就看不到了。
page_load
page.smartNavigation=true
24.在Datagrid中修改数据,当点击编辑键时,数据出现在文本框中,怎么控制文本框的大小 ?
private void DataGrid1_ItemDataBound(obj sender,DataGridItemEventArgs e)
{
for(int i=0;i<e.Item.Cells.Count-1;i++)
if(e.Item.ItemType==ListItemType.EditType)
{
e.Item.Cells[i].Attributes.Add("Width", "80px")
}
}
25.对话框
private static string ScriptBegin = "<script language=\"JavaScript\">";
private static string ScriptEnd = "</script>";public static void ConfirmMessageBox(string PageTarget,string Content)
{
string ConfirmContent="var
retValue=window.confirm(’"+Content+"’);"+"if(retValue){window.location=’"+PageTarget+"’;}";ConfirmContent=ScriptBegin + ConfirmContent + ScriptEnd;
Page ParameterPage = (Page)System.Web.HttpContext.Current.Handler;
ParameterPage.RegisterStartupScript("confirm",ConfirmContent);
//Response.Write(strScript);
}
26. 将时间格式化:string
aa=DateTime.Now.ToString("yyyy年MM月dd日");
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年= DateTime.Now.Year;
1.3 取当前月
int 月= DateTime.Now.Month;
1.4 取当前日
int 日= DateTime.Now.Day;
1.5 取当前时
int 时= DateTime.Now.Hour;
1.6 取当前分
int 分= DateTime.Now.Minute;
1.7 取当前秒
int 秒= DateTime.Now.Second;
1.8 取当前毫秒
int 毫秒= DateTime.Now.Millisecond;
27.自定义分页代码:
先定义变量 :
public static int pageCount; //总页面数
public static int curPageIndex=1;
//当前页面
下一页:
if(DataGrid1.CurrentPageIndex < (DataGrid1.PageCount - 1))
{
DataGrid1.CurrentPageIndex += 1;
curPageIndex+=1;
}bind(); // DataGrid1数据绑定函数
上一页:
if(DataGrid1.CurrentPageIndex >0)
{
DataGrid1.CurrentPageIndex +=
1;
curPageIndex-=1;
}bind(); // DataGrid1数据绑定函数
直接页面跳转:
int a=int.Parse(JumpPage.Value.Trim());//JumpPage.Value.Trim()为跳转值
if(a<DataGrid1.PageCount)
{
this.DataGrid1.CurrentPageIndex=a;
}bind();
28.DataGrid使用:
添加删除确认:
private void DataGrid1_ItemCreated(object sender,
System.Web.UI.WebControls.DataGridItemEventArgs e)
{
foreach(DataGridItem di in this.DataGrid1.Items)
{
if(di.ItemType==ListItemType.Item||di.ItemType==ListItemType.AlternatingItem)
{
((LinkButton)di.Cells[8].Controls[0]).Attributes.Add("onclick","return
confirm(’确认删除此项吗?’);");
}
}
}
样式交替:
ListItemType itemType = e.Item.ItemType;
if (itemType == ListItemType.Item )
{
e.Item.Attributes["onmouseout"] =
"javascript:this.style.backgroundColor=’#FFFFFF’;";
e.Item.Attributes["onmouseover"] =
"javascript:this.style.backgroundColor=’#d9ece1’;cursor=’hand’;" ;
}
else if( itemType == ListItemType.AlternatingItem)
{
e.Item.Attributes["onmouseout"] =
"javascript:this.style.backgroundColor=’#a0d7c4’;";
e.Item.Attributes["onmouseover"] =
"javascript:this.style.backgroundColor=’#d9ece1’;cursor=’hand’;" ;
}
添加一个编号列:
DataTable dt= c.ExecuteRtnTableForAccess(sqltxt); //执行sql返回的DataTable
DataColumn
dc=dt.Columns.Add("number",System.Type.GetType("System.String"));for(int i=0;i<dt.Rows.Count;i++)
{
dt.Rows[i]["number"]=(i+1).ToString();
}DataGrid1.DataSource=dt;
DataGrid1.DataBind();
DataGrid1中添加一个CheckBox,页面中添加一个全选框
private void CheckBox2_CheckedChanged(object sender, System.EventArgs e)
{
foreach(DataGridItem thisitem in DataGrid1.Items)
{
((CheckBox)thisitem.Cells[0].Controls[1]).Checked=CheckBox2.Checked;
}
}
将当前页面中DataGrid1显示的数据全部删除
foreach(DataGridItem thisitem in DataGrid1.Items)
{
if(((CheckBox)thisitem.Cells[0].Controls[1]).Checked)
{
string
strloginid= DataGrid1.DataKeys[thisitem.ItemIndex].ToString();
Del
(strloginid); //删除函数
}
}
29.当文件在不同目录下,需要获取数据库连接字符串(如果连接字符串放在Web.config,然后在Global.asax中初始化)
在Application_Start中添加以下代码:
Application["ConnStr"]=this.Context.Request.PhysicalApplicationPath+ConfigurationSettings.
AppSettings["ConnStr"].ToString();
30. 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成
¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039
(16进制)
12345.ToString("p"); //生成 1,234,500.00%
31、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。 如:string s1 = str.Substring(0,2);