2011-12-09 43 views
5

我一直試圖讓這個工作幾個小時,但沒有任何來自谷歌可以幫助我解決這個問題。從中繼器的文本框中獲取值asp.net c#

我有一個很簡單的中繼器控制:

<asp:Panel ID="userDefDiv" Visible="false" runat="server"> 
       <asp:Repeater ID="userDefRepeater" EnableViewstate="false" runat="server"> 
        <ItemTemplate> 
         <asp:TextBox ID="TextBox1" runat="server" EnableViewState="false"></asp:TextBox><br/> 
        </ItemTemplate> 
       </asp:Repeater> 
      </asp:Panel> 

的userDefDiv面板是另一種面板,其內部的ContentPlaceHolder內部。 userDefDiv的父面板沒有「enableviewstate =」false「」。

所以。 此頁面上的所有內容都是在幾次linkbuttons_click後發生的。所以在page_load期間沒有任何反應。當我點擊另一個按鈕後,我想從中繼器內的不同文本框中獲取數據。

C#代碼:

這是創建所有中繼器項目的代碼。

public void createUserDef() 
{ 
     DataTable userDefData; 
     userDefData = ..... (data from Database.) 

      userDefDiv.Visible = true; 
      userDefRepeater.DataSource = userDefData; 
      userDefRepeater.DataBind(); 
} 

爲LinkBut​​ton的代碼:

protected void linkButton_Click(object sender, EventArgs e) 
{ 
    createUserDef(); 

    Label2.Visible = true; 
    foreach (RepeaterItem item in userDefRepeater.Items) 
    { 
     TextBox box = (TextBox)item.FindControl("TextBox1"); 
     string b = box.Text; 
     Label2.Text += b + " . "; 
    } 
} 

正如你看到我的點擊過程中再次創造了中繼器。但我唯一能讀的是label2。是一個「。」,每個文本框的點。 但文本框中的文本是空的。 我在做什麼錯?

感謝您的閱讀! 馬蒂亞斯

SOLUTION:

  1. 添加的EnableViewState = 「true」 將文本框&中繼器。

  2. 在獲取值之前不要調用dataBind()。

謝謝!

回答

4

您需要將EnableViewState設置爲'true'才能使鏈接按鈕在中繼器中正常工作

+0

中繼器中沒有鏈接按鈕。 linkbutton在userDefDiv面板之外。 – Easyrider

+1

哦,我明白了 - 我被點擊方法名稱所愚弄。無論如何,相同的答案應該工作。除非EnableViewState = true,否則轉發器中文本框的值將不可用。 – Ray

+0

它不起作用。 – Easyrider

相關問題