C#靜態生成DropDownList履行掉敗緣由剖析。本站提示廣大學習愛好者:(C#靜態生成DropDownList履行掉敗緣由剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#靜態生成DropDownList履行掉敗緣由剖析正文
本文實例剖析了C#靜態生成DropDownList履行掉敗緣由。分享給年夜家供年夜家參考。詳細以下:
明天研討DDL控件的靜態生成的時刻碰到了點成績 ,當我寫代碼的時刻發明點擊button後 只能創立一個DDL控件,再點擊就沒有感化了,後來我在外面設置了變量,看看這個事宜是否是沒有履行,發明變量並沒有轉變,方才有點困惑不解,後來發明當我觸發其它事宜的時刻,控件消逝了!我想,button的click事宜會回傳,而回傳後新建的控件就會消逝,我才明確,本來每次都有創立新的控件,只是每次再次點擊button的時刻回傳頁面,招致之前發生的控件消逝了,而那獨一的一個控件是此次生成的,我又查詢了一下asp的性命周期 看來關於頁面的性命周期懂得的不清晰會出很多多少成績。
簡略的說 頁面的性命周期分為上面幾個進程
1.初始化(Init)
2.控件狀況的裝載(LoadControlState)
3.視圖裝載(LoadViewState)
4.回傳的數據處置(LoadPostData)
5.頁面加載(OnLoad)
6.襯著(OnPreRender)
7.保留視圖狀況(SaveViewState)
8.保留控件狀況(SaveControlState)
9.出現(Render)
這裡當我在新點擊button觸發新建DDL控件的事宜的時刻,這個事宜履行了,然則上一次創立的控件並沒有保留狀況,所以湧現了下面的成績
簡略研討了一下保留狀況的辦法,就是把狀況保留到HiddenField中
<body> <form id="form1" runat="server"> <div> <asp:HiddenField ID="hidden" runat="server" /> <asp:Button ID="Btn" runat="server" Text="靜態創立" onclick="Btn_Click" /> <asp:Button ID="GetValue" runat="server" Text="獲得選中的值" onclick="GetValue_Click" /> <asp:Label ID="lbl" runat="server" Text=""></asp:Label> <asp:Panel ID="PanelControl" runat="server"> </asp:Panel> </div> </form> </body>
上面是靜態創立code 道理為點擊按鈕 給HiddenField賦值或許可以給ViewState賦值然後再創立控件,如許再每次進入頁面的時刻,斷定iddenField或許Viewstate能否有值,有就顯示誰人靜態創立的控件,如許就把狀況保留住了,當你再點擊其他控件時,既不會再消逝了。
protected void Page_Load(object sender, EventArgs e) if (!string.IsNullOrEmpty(Hidden.Value) && Hidden.Value=="flag") { CreateDropDownList(); } if(!isPostBack) //創立控件不克不及寫在這裡,這個是斷定能否為回發 { } } protected void Btn_Click(object sender, EventArgs e)//創立控件 { Hidden.Value = "flag";//這裡解釋曾經創立過一個控件了 CreateDropDownList(); }
接上去是創立ddl的根本代碼
private void CreateDropDownList() { DropDownList ddl = new DropDownList(); ddl.ID = "ddl"; ddl.Items.Add(new ListItem("1", "1")); ddl.AutoPostBack = true; ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged); //給ddl添加事宜 PanelControl.Controls.Add(ddl); //放進容器 }
上面為點擊控件 取得靜態創立的控件選中的值 事理也是回發
protected void GetValue_Click(object sender, EventArgs e) { DropDownList ddl = PanelControl.FindControl("ddl") as DropDownList; if (ddl != null) { lbl.Text ="點擊按鈕獲得的值為"+ddl.SelectedValue; } }
靜態創立的ddl的事宜
protected void ddl_SelectedIndexChanged(object sender, EventArgs e) { DropDownList ddl= sender as DropDownList; if (ddl != null) { lbl.Text ="經由過程本身回發事宜獲得的值為"+ddl.SelectedValue; } }
願望本文所述對年夜家的C#法式設計有所贊助。