zoukankan      html  css  js  c++  java
  • ASP.NET 2.0 新增/改进的知识点(收集) 很有用的,不定时更新

    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>

  • 相关阅读:
    etcd基本操作
    使用docker配置etcd集群
    etcd启用https服务
    etcd3集群管理
    Opengl绘制我们的小屋(一)球体,立方体绘制
    OpenGL 用三角形模拟生成球面
    PDFSharp生成PDF.
    OpenXml操作Word的一些操作总结.无word组件生成word.
    F# 图形数学基础。
    SQL Server (MSSQLSERVER) 服务因 2148081668 服务性错误而停止。
  • 原文地址:https://www.cnblogs.com/chinafine/p/1234872.html
Copyright © 2011-2022 走看看