asp.net 2.0与 asp.net 1.x比较已经有了许多变化,通过一段时间的知识准备,现在开始Express来学习asp.net 2.0,我的资料是beta1而现在用的是bata2,相对于beta1已经有了一些改变,比如目录除了bin保持兼容外加了App_xxx,又如在beta1<Bindings>现在改成了<DataBindings>。
asp.net 2.0加强了对2层环境的功能,典型的就是<xxxDataSource>控件,使用他来访问数据,而且提供了<GridView>是<DataGrid>的功能增强。
<asp:GridView ID="gv1" runat=server AutoGenerateColumns=false DataSourceID="sqlds1" AllowPaging=true BackColor=white BorderColor="#9999"
CellPadding=3 BorderWidth=1 PageSize=10
PagerSettings-Mode=NextPreviousFirstLast PagerSettings-FirstPageText="FP" PagerSettings-NextPageText="Next"
DataKeyNames="CustomerID" AutoGenerateSelectButton=true>
<Columns>
<asp:BoundField DataField="CustomerID" HeaderText="CuID"/>
</Columns>
<AlternatingRowStyle BorderColor=AntiqueWhite BackColor=#CCCC /></asp:GridView>
<asp:SqlDataSource ID="sqlds1" runat=server SelectCommand="select * from Customers" ProviderName="System.Data.SqlClient" ConnectionString="server=localhost;uid=sa;password=goodbaby;database=northwind"></asp:SqlDataSource>
----two
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px"
DataSourceID="sqlds2" AutoGenerateRows=true>
</asp:DetailsView>
<asp:SqlDataSource ID="sqlds2" runat=server SelectCommand="select * from Customers" ProviderName="System.Data.SqlClient" ConnectionString="server=localhost;uid=sa;password=goodbaby;database=northwind" FilterExpression="CustomerID='@CuID'">
<FilterParameters>
<asp:ControlParameter Name="CuID" ControlID="gv1" PropertyName="SelectedValue" />
</FilterParameters>
</asp:SqlDataSource>
这样的一个列子就是一个2层的方式,有意思的是下面的asp.net 2.0可以直接从一个控件取得数据他提供了<asp:ControlParameter Name="CuID" ControlID="gv1" PropertyName="SelectedValue" />只需要简单的设置就可以从控件取得参数作为数据访问用。让DataVIew同Details协同工作。但很遗憾在beta1上可以,在beta2上出现了问题,原因我还不找到。
对xml的支持<XmlDataSource>提供了对xml的操作封装。
<asp:DataList ID="DataList1" runat="server" DataSourceID=xds_Artists>
<ItemTemplate>
<p>
<b><%# XPath("@Name") %></b>
<br />
<i><%# XPath("Painting/Title") %></i>
<br />
<%# XPath("Painting/Year") %>
</p>
</ItemTemplate>
</asp:DataList>
<asp:XmlDataSource ID="xds_Artists" runat="server" DataFile="~/Artists.xml" XPath="Artists/Painter"></asp:XmlDataSource>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Hardware.xml"></asp:XmlDataSource>
你只需要指定你的xml文件再使用任何数据绑定控见就可以了,通过xpath提供对xml的定位来获取你需要的数据。 xml的层次数据表示就不得不说新的Tree,和Menu控件。下面的列子是将xml文档与Menu一起工作。
<asp:Menu ID="M1" DataSourceID="XmlDataSource1" runat=server>
<DataBindings>
<asp:MenuItemBinding DataMember="Item" TextField="name" />
<asp:MenuItemBinding DataMember="opion" TextField="Choice" />
</DataBindings>
</asp:Menu>
很方便对简单的显示已经够了,但他同时提供了可编程的良好支持。提供了很多Event,Method,Propertiy,关于怎么使用可以查看msdn详细文档。
在Navagation上Sitemapxxx提供了对整个应用的全局导航支持。先建一个web.sitemap,这是一个xml文档,sitemappath就可以轻松为你的应用导航了,你还可以把他绑定到你的Menu
<asp:SiteMapDataSource ID="ST" runat=server></asp:SiteMapDataSource>
<asp:Menu ID="M" DataSourceID="ST" runat=server Orientation=Horizontal></asp:Menu>
很简单的就把他用菜单来显示了。
master是一个新的东西,对模板进行了很好的支持。
<form id="form1" runat="server">
MyMasterPage
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
MyMasterPageDefault
</asp:contentplaceholder>
<asp:contentplaceholder id="ContentPlaceHolder2" runat="server">
</asp:contentplaceholder>
</form>
简单的模板,很精彩的一点就是NestMaster
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="NestMaster.master.cs" Inherits="NestMaster" MasterPageFile="~/MasterPage.master"%>
<asp:Content id="ContentPlaceHolder1" runat="server" ContentPlaceHolderID=ContentPlaceHolder1>
NestMasterPage
<asp:contentplaceholder id="ContentPlaceHolder3" runat="server">
</asp:contentplaceholder>
</asp:Content>
然后是contentpage
<%@ Page Language="C#" MasterPageFile="~/NestMaster.master" AutoEventWireup="true" CodeFile="NestMaster.aspx.cs" Inherits="NestMaster" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID=ContentPlaceHolder3 runat=server>ContentPage</asp:Content>
好了就这样你的ContentPage就有了两个模板的特性。在mater中加入:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Label1.Text = System.Guid.NewGuid().ToString();
}
}
你的ContentPage中加如如下代码
protected void Page_LoadComplete(object sender, EventArgs e)
{
Label1.Text = (Master.FindControl("Label1") as Label).Text + "goodbabygood";
Master.Page.Title = "NewTitle";
}
你的Lael1可以获得mater的Label1的直,这里需要注意的是Page_LoadComplete,因为master的Page_Load是在Content的Page_Load后执行的,这是他的Event Order。
很简单的的初入asp.net 2.0今后还有许多新特性,比如 webpart,MemberShip等等,说到asp.net 2.0就不得不说C# 2.0,包括了许多新的特性,Gerneric,匿名方法,delegate,等等。最近学着使用ildasm但出来的东西我看的吃力,看来因该补充下这方面的知识。虽然很早就接触了这方面的东西,好吧继续努力,我还是初学者,因该努力点,还有就是真确的方向,去做。