此部分乃《ASP.NET.3.5.Unleashed》讀書筆記
基礎部分
1.命名空間導入可以在Web.Config中設置,這樣在Aspx頁面中可以去掉該命名空間導入聲明.
<configuration>
<system.web>
<pages>
<namespace>
<add namespace="System.Net.Mail"/>
<namespace>
<pages>
<system.web>
<configuration>
2.傳統的HTML控件聲明爲Asp.net服務器控件後(runat="server"),你就可以方便的在程序中使用它.
<span id="spanNow" runat="server">
<script runat="server">
void Page_Load(){
spanNow.innerText = DataTime.Now.ToString("T");
}
</script>
所有的服務器控件都是一個.Net類,將會在服務器段解釋執行.
3.頁面請求的事件序列
1.PreInit
2.Init
3.InitComplete
4.PreLoad
5.Load //發生在所有控件事件之前
6.LoadComplete
7.PreRender //發生在所有控件事件之後
8.PreRenderComplete
9.SaveSateComplete
10.Unload
Asp.net支持AutoEventWireUp屬性.如果該屬性設置爲True,Page_Load()方法將會處理Load事件;Page_PreRender()方法 將會處理PreRender事件.AutoEventWireUp屬性不支持所有事件,比如Page_InitComplete().
4.定義屬性
在 ProperyTest類中定義一個屬性Message
public class ProperyTest{
private String _message;
public String Message{
get { return _message;}
set { _message = value;}
}
}
那麼我可以在Aspx這樣使用:
void Page_Load()
{
ProperyTest pt = new ProperyTest();
pt.Message = "hello world";
}
屬性實際是種訪問器的特殊方法.
當讀取Message時,會自動調用get方法;當設置Message時,會調用set方法.不實現set方法的屬性是隻讀.
.Net3.0後引入了自動屬性(Automatic Properties)的功能,它爲屬性的定義提供了更加簡短的方法.
我們定義一個 PropertyTest2,它有三個屬性.
public class PropertyTest2{
public String Message { get;set; }
public int Age {get;set;}
public String Name {get;set;}
}
這種形式和在interface定義屬性的形式一樣的,但表達的含義是不同的.
5.初始化器(Initializers)
數組的初試化形式一般如下:
int[] array= new int[] {1,3,4,2};
.Net 3.0後,對象和集合也可以使用類似數組的初始化形式了.
5.1 對象初始化器
PropertyTest2 pt1 = new PropertyTest2{Message="test1",Age=25,Name="yang"};
PropertyTest2 pt2 = new PropertyTest2{Message="test2",Age=26,Name="huang"};
5.2 集合初試化器
List<String> list1 = new List<String>{"str1","str2","str3"};
List<PropertyTest2> list2 = new List<PropertyTest2>{pt1,pt2};
6.擴展方法(Extension Methods)
在JavaScript中可以通過對象的prototype屬性來給對象添加擴展新的方法
.Net3.0後可以通過聲明一個靜態類和靜態方法來實現方法擴展.
public static class MyExtensions{
public static String HtmlEncode(this String str) { //給String類添加HtmlEncode()方法
return System.Web.HttpUtility.HtmlEncode(str);
}
}
this關鍵字說明該新增的方法將被用於String類型
擴展方法通過對象來調用
String str = "<script>alert('extension!')</script>";
str = str.HtmlEncode();
7.ADO.Net支持的兩種數據訪問模式
7.1 連接模式 (connected model)
利用Connection,Command,DataReader檢索數據
使用DataReader要比DataSet性能好些
7.2 非連接模式 (disconnected model)
利用DataAdapter,DataSet,DataTable,DateView等
8.數據庫連接池
當你使用SqlConnection時,已啓動了數據庫連接池.默認情況下,ADO.NET框架最大能保持100個數據庫連接.
當使用完畢時,請調用SqlConnection.Close()方法,把數據庫連接返回到連接池中
以下代碼用來顯示當前數據庫的所有用戶連接數:
數據訪問部分
1.數據綁定控件(DataBound Controls)
有三種類型的數據綁定控件:列表類型控件(list controls),表格類型控件(tabular controls),級聯類型控件(hierarchical controls)
1.1 列表類型控件
ASP.NET 3.5包含如下五種列表控件:
1 BulletedList
2 CheckBoxList
3 DropDownList
4 ListBox
5 RedioButtonList
所有的五種列表控件繼承於ListControl基類,所以五種類型都繼承了很多相同的屬性和方法.
1.2 表格類型控件
ASP.Net3.5包含六種表格類型控件:
1 GridView
2 DataList
3 Repeater
4 ListView(3.5新增) 一般和DataPager控件一起使用
5 DetailsView
6 FormView
1.3 級聯類型控件
ASP.NET包含兩種級聯類型控件:
1 Menu
2 TreeView
2.數據源控件(DataSource Controls)
ASP.NET3.5版本中有六種類型的數據源控件也可以分爲兩類
2.1 類型一
1 SqlDataSource 以sql形式提供數據
2 LinqDataSource(3.5新增) 以Linq to Sql 提供數據
3 AccessDataSource 提供Access數據
4 ObjectDataSource 以業務對象形式提供數據
以上四種繼承於DataSourceControl基類,可以用作表格顯示數據源,它們都支持如下幾種參數對象:
1 Parameter
2 ControlParameter
3 CookieParameter
4 FormParameter
5 ProfileParameter
6 QueryStringParameter
7 SessionParameter
2.2 類型二
1 XmlDataSource 以XML形式提供數據
2 SiteMapDataSource 以Site Map Provider提供數據
以上兩種繼承於HierarchicalDataSourceControl基類,可以用作表格顯示和級聯顯示數據源
3.編程式數據綁定
每一個DataBound Control 都有DataSource屬性和DataBind()方法,通過使用它們你可以採用編程形式來關聯DataBound Control和一個data Source.
ps ASP.NET 1.x Framework只支持編程式數據綁定,第一個版本不包含DataSource Controls.
4.數據綁定表達式
<%# expression >
當數據綁定事件發生時,該表達式纔會被計算
ex.<asp:SqlDataSource id="ds1" ConnectString="" SelectCommand="select Id,Title From Movies" runat="server"/>
<asp:Repeater id="rep1" DataSourceId="ds1" runat="server">
<ItemTemplate>
<asp:HyperLink id="h1" Text='<%# Eval("Title")>' NavigateUrl='<%# Eval("Id","Details.aspx?id={0}")>'>
</ItemTemplate>
<asp:Repeater>
Page類的受保護的(protected)Eval()方法實際是調用了靜態方法DataBinder.Eval().