String *I am String* (自由大过天) 路漫漫其修远兮,吾以上下而求索

(道,可道,非常道)-----天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。

导航

我的asp.net 2.0初体验

Posted on 2005-04-30 08:31  goodbaby  阅读(596)  评论(0)    收藏  举报

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但出来的东西我看的吃力,看来因该补充下这方面的知识。虽然很早就接触了这方面的东西,好吧继续努力,我还是初学者,因该努力点,还有就是真确的方向,去做。