2011-12-08 103 views
1
this.Controls.Add(new CheckBox{ Checked = true; }) 

當我在page_load添加此項。它工作,它添加複選框,它是可見的。動態單選按鈕值檢索

有點不同的方法:

var button = new CheckBox{ Checked = true; } 
globals.button = button; 
this.Controls.Add(button); 

全局與上,我想設置的複選框中檢索它的按下一個按鈕後數據的希望複選框屬性的類。

public static CheckBox button { get; set; } 

然而,當按下一個按鈕,控制消​​失了我的屏幕,並以我Globals類的按鈕尚未與我對複選框所做的任何更改更新。

當我執行button.click事件時,如何更改複選框的選中狀態並捕獲它的當前狀態?

回答

1

您必須在每次回發時重新創建動態控件,它們不會奇蹟般地重新出現,因爲每個請求都是Page類的新實例。

請參閱我的previous關於此主題的帖子,它使用的是用戶控件,但其想法完全相同。

And another

必須的Page_Load

前添加控制我通常做在覆蓋CreateChildControls但有些人使用Page_Init

看到this article

更新

這是動態地添加複選框非常簡單的方法,點擊按鈕時,保留狀態/值。

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:PlaceHolder runat="server" ID="ph"></asp:PlaceHolder> 
     <asp:Button OnClick="btn_Click" runat="server" ID="btn" Text="Click Me" /> 

     <asp:Label runat="server" ID="lbl"></asp:Label> 
    </form> 
</body> 
</html> 

然後代碼隱藏

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 


public partial class Test : Page 
{ 
    private CheckBox MyCheckBox { get; set; } 
    protected override void CreateChildControls() 
    { 

     this.MyCheckBox = new CheckBox() { Checked = true }; 
     this.ph.Controls.Add(this.MyCheckBox); 
     base.CreateChildControls(); 
    } 

    protected void btn_Click(object sender, EventArgs e) 
    { 
     var someValue = this.MyCheckBox.Checked; 
     this.lbl.Text = someValue ? "Checked" : "Not Checked"; 
    } 

} 
+0

添加控件再次是沒有問題的。當我按下按鈕時改變它的價值是我的問題。 –

+0

你說'但是,當一個按鈕被按下,控制已經消失了我的屏幕' - 這表明你沒有重新添加每個回發控制,如果它沒有添加你不能得到的價值 –

+0

我想獲得來自globals類中設置的複選框的值。 –

0

如果Page_Load(object sender, EventArgs e)方法創建動態控件,他們將不會返回用戶所做的更改。

您遇到問題的原因是在調用Page_Load(object sender, EventArgs e)方法之前創建了ASP.Net視圖狀態。 ASP.Net視圖狀態包含頁面上的控件及其值。在創建ASP.Net視圖狀態之前調用Page_Init(object sender, EventArgs e)方法。通過在Page_Init(object sender, EventArgs e)方法中創建控件將返回用戶輸入的內容,而且只有在頁面不是回發時才需要創建控件。

如果由於某種原因無法在Page_Init(object sender, EventArgs e)方法中創建控件,那麼您將編輯以更改ASP.Net視圖狀態Page_Load(object sender, EventArgs e)

如果您需要在Page_Load(object sender, EventArgs e)方法來創建控件這個問題應該幫助How to Persist Variable on Postback