此部分乃《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().