ASP页面和WEB控件的生命周期
参考:https://msdn.microsoft.com/zh-cn/library/ms178472(v=vs.80).aspx
七种页面跳转的方法介绍
参考:http://www.csharpwin.com/dotnetspace/12885r562.shtml
1、利用HTML标签
2、HyperLink控件
3、Response.Redirect()方法
4、Server.Transfer()方法
5、 Server.Execute()方法
6、Javascript实现跳转
7、Respone.Write()
页面跳转总结
1)当需要把用户跳转到另一台服务器上的页面的时候使用redirect
2)当需要把用户跳转到非aspx页面时候,如html使用redirect
3)需要把查询字符串作为url一部分的时候保留传给服务器的时候,因为其他2种方法不能做到2次postback,把数据先带回服务器使用redirect
4)需要aspx页面间的转换(不涉及登录) 使用transfer
5)当需要把aspx页面的输出结果插入到另一个aspx页面的时候使用execute方法。
6)如果要让用户来决定何时转换页面以及转到哪一个页面,超级链接最适合。
7)如果要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。
8)如果要把用户连接到另一台服务器上的资源,使用Response.Redirect。
9)如果要将查询字符串作为URL的一部分保留,使用Response.Redirect。
10)如果要将执行流程转入同一Web服务器的另一个ASPX页面,应当使用Server.Transfer而不是Response.Redirect,因为Server.Transfer能够避免不必要的网络通信,从而获得更好的性能和浏览效果。
11)如果要捕获一个ASPX页面的输出结果,然后将结果插入另一个ASPX页面的特定位置,则使用Server.Execute。
12)如果要确保HTML输出合法,请使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。
postback(回发)后如何保持网页的位置
通常情况下,ASP.NET 页面 PostBack(回发)后,页面一般定位在整个网页的顶部!但我们在实际项目中经常需要,回发后能定位到自己刚刚点击提交按钮位置,那这种情况如何实现呢,下面介绍三种实现些功能的方法
一、应用程序级设置:在web.config中增加一个pages节点
<pages maintainScrollPositionOnPostBack="true">
二、页面级设置:在aspx页面上进行设置,在页面的page指令中增加属性
<@page MaintainScrollPositionOnPostback="true"
三、在后台cs代码中设置
Page.MaintainScrollPositionOnPostBack = true;
Server.MapPath & Request.MapPath
一、Server.MapPath()应用
假设当前的网站目录为E:wwwroot 应用程序虚拟目录为E:wwwrootcompany 浏览的页面路径为E:wwwrootcompany ews 下面的一个 aspx页面。
在该页面中使用
Server.MapPath(””) :返回当前页面所在的物理文件路径:E:wwwrootcompany ews
Server.MapPath(“/”) :返回应用程序根目录所在的物理文件路径:E:wwwroot
Server.MapPath(“./”) :返回当前页面所在的物理文件路径:E:wwwrootcompany ews
Server.MapPath(“../”):返回当前页面所在的上一级的物理文件路径:E:wwwrootcompany
Server.MapPath(“~/”):返回应用程序的虚拟目录(路径):E:wwwrootcompany
Server.MapPath(“~”):返回应用程序的虚拟目录(路径):E:wwwrootcompany
二、ASP.NET中Server.MapPath() 和 Request.MapPath()使用区别:
Server.MapPath(string) :是将相对于当前调用文件的文件(或目录)映射为物理路径;
Request.MapPath(string) :是将string虚拟路径映射为物理路径(asp中Request无此方法)
Server.MapPath(string) 中string 可以用“../”方式引用父目录,甚至可以将此目录跳到整个WEB目录外,如:C:WWWROOT
目录为WEB根目录,在根目录文件中调用此Server.MapPath(“../脚本文件”),则可以调用WEB目录外的脚本、资源等。
Request.MapPath(string) 中的string为虚拟目录,只能相对WEB虚拟目录形式的,也不允许”../”方式调用,只能是”/”,”/xx”等字符串
string str1 =Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名。
string str2=Environment.CurrentDirectory;//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str3=Directory.GetCurrentDirectory();//获取应用程序的当前工作目录。
string str4=AppDomain.CurrentDomain.BaseDirectory;//获取基目录,它由程序集冲突解决程序用来探测程序集。
string str6=Application.ExecutablePath;//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str7=AppDomain.CurrentDomain.SetupInformation.ApplicationBase;//获取或设置包含该应用程序的目录的名称.
向服务端控件添加自定义Attributes
向服务端控件添加的自定义Attributes后,还需要override关于ViewState的两个方法,以保证新增的Attributes值能正常的使用。
参考地址:http://www.xuebuyuan.com/53996.html [原创]实现给DropDownList下拉框控件子项增加自己Attribute特性…
protected override object SaveViewState() { object[] objs = new object[2]; objs[0] = base.SaveViewState(); ArrayList list = new ArrayList(); objs[1] = list; foreach (ListItem item in this.Items) { Hashtable hash = new Hashtable(); foreach (object key in item.Attributes.Keys) { hash.Add(key, item.Attributes[key.ToString()]); } list.Add(hash); } return objs; } protected override void LoadViewState(object savedState) { object[] objs = (object[])savedState; base.LoadViewState(objs[0]); ArrayList list = (ArrayList)objs[1]; for (int i = 0; i < list.Count; i++) { Hashtable hash = (Hashtable)list[i]; foreach (object key in hash.Keys) { Items[i].Attributes.Add(key.ToString(), hash[key].ToString()); } } }
Web控件数据绑定
参考:http://blog.csdn.net/Joetao/article/details/5051734,http://www.cnblogs.com/xiaobaihome/archive/2011/12/08/2280184.html