2014-10-31 67 views
0

我正在開發一個asp.net應用程序。動態使用asp.net應用程序中的單選按鈕

當用戶點擊一個頁面時,一些單選按鈕被動態添加到該頁面。

然後,當他點擊另一個「更新」按鈕,我會檢查,檢查哪個單選按鈕並將它們回發給服務器。

的問題是以下內容:

我在Page_Load方法動態地添加所述的單選按鈕。

但是,當我在更新按鈕onclick方法,我不能用它們來檢查他們是否檢查ot不。

我已經嘗試了幾種使用單選按鈕的靜態字典的方法,但是當我在更新方法上時,我無法對它們進行引用。

這是我的方法,當頁面加載:

private static Dictionary<string,RadioButton> buttons; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    for (int i=0;i<5;i++) 
    { 
     RadioButton r = new RadioButton(); 
     r.Text = i.ToString(); 
     r.ID = i.ToString();; 
     Panel1.Controls.Add(r); 
     buttons.Add(i.ToString(), r); 
    } 
} 

這是我的方法時,在更新按鈕,用戶點擊其中我想訪問我的每一個單選按鈕,這取決於他們的ID或他們的文字,但我不能: 例如,如果我想所有的按鈕從1到3進行檢查:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    for (int i=1;i<4;i++) 
    { 
     buttons[i].checked=true; 
    } 
} 
+0

請勿使用靜態字典,因爲Web應用程序旨在同時用於多個用戶。如果您想在回發後重新獲得按鈕,則需要通過控制面板Panel1.Controls的控件集合進行循環。 – 2014-10-31 10:58:42

+0

好吧,但與此我只得到一個控制元素,我沒有訪問「檢查」屬性。此外,我必須在(!如果回發),page_load或button1_click? – user2443476 2014-10-31 12:26:49

回答

0

Asp.net將清除每個回發的動態添加控件。如果你想獲得他們的選擇,你必須在客戶端點擊JS中的按鈕。 C#代碼:

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      for (int i = 0; i < 5; i++) 
      { 
       RadioButton r = new RadioButton(); 
       r.Text = i.ToString(); 
       r.ID = i.ToString(); 
       r.ClientIDMode = System.Web.UI.ClientIDMode.Static; 
       Panel1.Controls.Add(r); 

      } 
     } 
    } 

和JS代碼:

<script type="text/javascript"> 
    function getCheckedRadios() { 
     alert(document.getElementById('1').checked); 
    } 
</script> 

您的按鈕的aspx代碼將是:

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="getCheckedRadios(); return false;"/> 

我希望這將有助於。