ASP.NET 2.0 新增/改進的知識點(收集) 很有用的,不定時更新

來源:互聯網
上載者:User

1.新增的頁面事件:

在ASP.NET 2.0中,一個ASP.NET頁面的生命週期主要為(紅色字型表示ASP.NET 2.0新增加的階段頁面事件):用戶端請求頁面—》預初始化(OnPreInit)—》初始化(OnInit)—》完成初始化(OnInitComplete)—》載入ViewState(LoadViewState)—》處理回送資料(IPostBackDataHandler)—》Page_OnPreLoad—》Page_OnLoad—》回傳更改通知(RaisePostDataChangedEvent)—》處理回傳事件(RaisePostBackEvent)—》Page_OnLoadComplete—》預呈現(OnPreRender)—》完成預呈現(OnPreRenderComplete)—》儲存ControlState(SaveControlState)—》儲存ViewState(SaveViewState)—》呈現(Render)—》Page_UnLoad。

OnPreInit:在初始化頁面OnInit事件前觸發。在這個階段裡,可以進行定義網站主題(Theme)或載入網站個人化所需要的資料資訊等操作。

OnInitComplete:完成初始化頁面OnInit事件後觸發。

OnPreLoad:在載入頁面OnLoad事件前觸發。

OnLoadComplete:完成頁面載入OnLoad事件後觸發。

OnPreRenderComplete:在完成預呈現OnPreRender事件後觸發。這是完成頁面呈現的最後一道關卡,在此之後,頁面將無法再進行任何呈現上的改動。

SaveControlState:儲存控制項狀態ControlState。ControlState是ASP.NET2.0控制項新增的一個屬性,類似ViewState作用,但它們區別在於ControlState用於儲存更加重要的控制項狀態資訊,以保證在禁用ViewState的情況下還可以對控制項狀態進行讀寫操作。

2.增加對頁面Header的控制:

System.Web.UI.Page類新增加了Header屬性,用於對HTML頁面頭地區裡資料的操作。通過對Header屬性的跟蹤,可以發現,Header屬性儲存著一個實現IPageHeader介面的對象(該對象有LinkedStyleSheets、Metadata、StyleSheet和Title四個屬性),實際上正是通過這個對象實現對HTML頁面頭地區裡資料的操作的。例如:

<script runat="server">

void Page_Load(object sender, System.EventArgs e)

{

    this.Header.Metadata.Add("author", "brooks");

}

</script>

其運行結果為:

< html >

< head > <title>Untitled Page</title>

    <meta name="author" content="brooks" />

</head>

3.asp.net 2.0中的MaxPageStateFieldLength 屬性

在asp.net 2.0中,可以強制對viewstate進行分段傳輸了,使用的是Page.MaxPageStateFieldLength 屬性,可以設定viewstate中,每個頁面狀態欄位的最大位元組數。格式如下,要在WEB.CONFIG檔案裡設定的:

<pages maxPageStateFieldLength="5" />

其中,將設定把viewstate為不超過5位元組,如果實際的viewstate超過該值,將進行分段傳輸,但每個分段的大小依然不超過maxPageStateFieldLength中的設定值, 預設設定值為-1,表示不對其進行分段傳輸。

4.Click button only once in asp.net 2.0

protected void Page_Load(object sender, EventArgs e)

{

    PostBackOptions options = new PostBackOptions(Button1,string.Empty);

    StringBuilder sb = new StringBuilder();

    if (Button1.CausesValidation && this.GetValidators(Button1.ValidationGroup).Count > 0)

    {

        options.ClientSubmit = true;

        options.PerformValidation = true;

        options.ValidationGroup = Button1.ValidationGroup;

        sb.Append("if (typeof(Page_ClientValidate) == 'function')");

        sb.Append("if(Page_ClientValidate(\"" + Button1.ValidationGroup + "\")==false) return false;");

    }

    if (!string.IsNullOrEmpty(Button1.PostBackUrl))

        options.ActionUrl = HttpUtility.UrlPathEncode(Button1.ResolveClientUrl(Button1.PostBackUrl));

   

    sb.Append("this.disabled = true;");

    sb.Append(ClientScript.GetPostBackEventReference(options));

    sb.Append(";");

    Button1.Attributes.Add("onclick", sb.ToString());

}

5.asp.net 2.0中得到sqldatasource返回的行數

在asp.net 2.0中,gridview是和sqldatasource控制項綁定的,那麼如何得到sqldatasource返回的記錄的行數呢?比如sqldatasource控制項中用select * from ....,如何返回其記錄行數?在.net 2.0中,可以通過sqldatasource的OnSelected事件實現,並且對select事件SqlDataSourceStatusEventArgs參數中的AffectedRows屬性設定一下就可以了,具體核心代碼如下:

protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)

{

    totalRows.Text = e.AffectedRows.ToString();

}

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=(local);Initial Catalog=Northwind;user id=sa;password=123456;"  ProviderName="System.Data.SqlClient" SelectCommand="SELECT [CustomerID], [CompanyName], [ContactName] FROM [Customers]" OnSelected="SqlDataSource1_Selected"></asp:SqlDataSource>

6.設定焦點

在asp.net 1.1中,當要在page_load頁面中,設定某個控制項為預設的焦點按鈕(也就是預設焦點是在這個控制項上的),可能要用到javascript的代碼,而在ASP.NET 2.0中,不用這些麻煩了,在form代碼中,使用defaultbutton 和 defaultfocus屬性就可以了,比如

< form id="Form1" defaultbutton="BtnSubmit" defaultfocus="TextBox1" runat="server">

則在頁面載入時,預設的button按鈕時btnsubmit,焦點預設就在texbox1上了

當然也可以通過代碼方式實現,如下

this.Textbox1.Focus(); 或 this.SetFocus(this.Textbox1);

7.asp.net 2.0中的彈出對話方塊

在asp.net 1.1中,要做1個彈出的對話方塊的話,一般是在服務端的代碼中這樣寫:

btnClick.Attributes.Add("onclick", "return confirm('Are you sure?');");

現在在ASP.NET 2.0中,只要使用用戶端的代碼就可以拉,新多了個onclientclick,這樣寫

< asp:button id="btnClick" runat="server" OnClientClick="return confirm('Are you sure?');" text="Button"></asp:button>

在彈出中加入變數:

protected void Page_Load(object sender, EventArgs e)
    {
        btnAdd.Attributes.Add("onclick","confirm('"+System.DateTime.Now.ToShortDateString()+"');");

        //btnAdd.Attributes.Add("onclick", "this.disabled=true;" + this.ClientScript.GetPostBackEventReference(btnAdd, ""));
       
    }

 8.自訂的頁面控制項,

比如在ASP.NET 1.1中,要聲明自訂的頁面控制項,

通常要在用到的每頁都要加入register prefix=........這樣的,很麻煩,而在asp.net 2.0中,如果你確定一個頁面自訂控制項要在整個項目中用到,只需要在WEB.CONFIG中加入

< system.web >

    <pages>

        <controls>

            <add tagPrefix="prefixname" namespace="namespacename "/>

        </controls>

    </pages>

</system.web>

其中prefixname為控制項的標識,namespace為命名空間就可以了。

9.跨頁面資料發送:

如果你需要多個頁面發送資料到同一個表單程式進行處理,或者資料在多個頁面之間傳輸處理的話,你就可以使用ASP.NET 2.0這個新特性。例如,我打算把Default.aspx頁裡TextBox1裡的文本資料發送到Default2.aspx頁面進行處理:

Default.aspx頁:

<%@ Page Language="C#" %>

< script runat="server">

    void Button2_Click(object sender, EventArgs e)

    {

        Label1.Text = "Hi," + TextBox1.Text + ". This is Default.aspx";

    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="form1" runat="server">

        <asp:TextBox ID="TextBox1" Runat="server"></asp:TextBox>

        <asp:Button ID="Button1" Runat="server" Text="PostToAnotherPage" PostBackUrl="~/Default2.aspx" />

        <asp:Button ID="Button2" Runat="server" Text="PostToSelf" OnClick="Button2_Click" />

        <br />

        <asp:Label ID="Label1" Runat="server" Text="Label"></asp:Label>

    </form>

</body>

</html>

Default2.aspx頁:

<%@ Page Language="C#" %>

< script runat="server">

    void Page_Load(object sender, System.EventArgs e)

    {

        TextBox textBox1 = (TextBox)PreviousPage.FindControl("TextBox1");

        this.Label1.Text = "Hi," + textBox1.Text + ". This is Default2.aspx!";

    }

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="form1" runat="server">

    <asp:label id="Label1" runat="server"></asp:label>

    </form>

</body>

</html>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.