ASP.NET Notes

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/5051734http://www.cnblogs.com/xiaobaihome/archive/2011/12/08/2280184.html 

原文地址:https://www.cnblogs.com/huhunet/p/7402765.html