總結Asp.net中Page載入PostData的具體過程 進而解決”擷取動態建立的控制項的PostData資料”問題

來源:互聯網
上載者:User
Asp.net中Page載入PostData過程:

1、觸發頁面init事件。
2、判斷是否IsPostBack,如果True,就走第3步,否則跳過第3步
3、解析PostData資料,並根據頁面的設計內容(.aspx),載入PostData(一次載入)到各個控制項。
4、觸發頁面的Load事件(在這個事件中有一個機會讓我們來準備Load動態建立控制項的PostData)。
5、再次判斷是否IsPostBack,如果True,就走第6步,否則跳過第6步
6、解析PostData資料,判斷是否還有剩餘的PostData還沒有被載入?如果是,進行第二次載入。否則退出
..........
說明:PostData的資料的載入規則:根據PostData(其實是一個Collection對象)中的控制項Name與當前Page的Control中的控制項對象的Name是否匹配,如果匹配就把Value賦給對應控制項對象的某個屬性。

也許你們已經發現剩餘的PostData是不是就是動態建立的控制項呈現到用戶端,又從用戶端Post過來的資料呢? 答案是完全正確的。剩餘的PostData確實是從動態建立的控制項對應的Post資料。流程的第6步表示:Asp.net在Page_Load事件後,還會再一次載入剩餘的PostData,這就是在很多文章中所提及的二次載入

比如是在某個Button的Click事件中建立了CheckBox,以成員變數CheckBox1引用,控制項Name為CheckBox1。然後呈現給用戶端,用戶端選中該CheckBox1,並又提交。由於是動態建立的控制項原因,在伺服器處理這次用戶端的提交時,在Page_Load是無法擷取該CheckBox1的是否被選中的狀態的。應該這樣處理:在Page_Load中再一次建立該CheckbBox1,以成員變數CheckBox1引用,控制項Name為CheckBox1,該對象的Name必須和前一次所動態建立控制項的Name必須相同),並返回,然後在其他控制項事件中擷取該checkbox1變數的check屬性值就是用戶端的使用者操作的實際值。

所以,在Page的Load事件的處理方式是實現“擷取動態建立控制項的PostData”的關鍵點!為什麼這麼說呢?因為只有在這個Load事件中,我們才有機會把前一次建立的動態控制項再建立一次,在讓Asp.net的Page來做"第5步和第6步",達到把剩餘的PostData載入到剛剛所建立的控制項對象去(這就是Postdata的二次載入)....

我不知道解釋是否詳細?如果有不明白的地方非常抱歉,大家可以自己去MSDN上尋找....我就不替大家找了...但是我這裡給出一個執行個體代碼,用於解釋“如何擷取動態建立控制項的PostData資料”,仔細研究一下,我想也差不多夠了,至於代碼中有不明白的地方,可隨時提問!希望對大家有協助! :-)

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace AspTestForFaq
{
    /**//// <summary>
    /// Summary description for WebForm6.
    /// </summary>
    public class WebForm6 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button CreateCtrl;
        protected System.Web.UI.WebControls.Button Submit;
        protected System.Web.UI.WebControls.Panel Panel1;

        private CheckBox m_CheckBox = null;
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
            if (IsPostBack && (null != ViewState["Created"]))
            {
                m_CheckBox = new CheckBox();
                Panel1.Controls.Add(m_CheckBox);
                
            }
        }

        Web Form Designer generated code#region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
        
        /**//// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {    
            this.CreateCtrl.Click += new System.EventHandler(this.CreateCtrl_Click);
            this.Submit.Click += new System.EventHandler(this.Submit_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void CreateCtrl_Click(object sender, System.EventArgs e)
        {
            if (ViewState["Created"] ==null)
            {
                m_CheckBox = new CheckBox();
                m_CheckBox.Text = "Click me";
                Panel1.Controls.Add(m_CheckBox);
                ViewState["Created"] = "1";
                CreateCtrl.Visible = false;
            }            
        }

        private void Submit_Click(object sender, System.EventArgs e)
        {
            if (m_CheckBox != null)
            {
                if (m_CheckBox.Checked)
                    m_CheckBox.Text = "Thank you for your check";
                else
                    m_CheckBox.Text = "please checked me!!!";
            }
        }
    }
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.