2011-11-08 8 views
0

私のコードは、C#(page_load関数)でその場でTextBoxを生成します。後でコードにアクセスできますか?コンパイルエラーが出て動作しないようです。誰かが確認できますか? additonalの問題のためフライで作成されたC#のテキストボックスにアクセス

コードが

aContent += "<table>"; 
aContent += "<tr><td>lablel </td><td style='bla blah'><input type='textbox' id='col-1' name='col-1'/></td></tr> ... 10 such rows here 
</table>" 

spanMap.InnerHtml = aContent; 

内容がOKにレンダリングされますが、recusrive反復は、テキストボックスを返しません。私はあなたがそれを正しく永続化している、あなたは、コードビハインドFindControl方法を使用してそれにアクセスすることができるはずと仮定すると、この

TextBox txt = (TextBox)this.FindControlRecursive(spanMap, "col-1"); 
// txt = (TextBox) spanMapping.FindControl("col-1"); this does not work too 
if (txt != null) 
{ 
     txt.Text = "A"; 
} 
+1

あなたが投稿してくださいでしたあなたが使用しているコードですか? – ipr101

+0

コードはどこですか?これをページコントロールに追加しましたか?それぞれのポストバックに再度追加しますか? –

+0

誰かをどのように確認できますか?コードを投稿してください。 – Nasreddine

答えて

2

のようにそれを呼び出しています。コントロールがある場所に応じて、あなたがコントロール階層を再帰的に検索する必要があります。

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id) 
    { 
     return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
     Control t = FindControlRecursive(c, id); 
     if (t != null) 
     { 
      return t; 
     } 
    } 

    return null; 
} 

FindControlRecursiveを使用する:

TextBox txt = this.FindControlRecursive(Page.Form, "TextBox1") as TextBox; 
if (txt != null) 
{ 
    string text = txt.Text; 
} 

をあなたはまだそれが上記の方法を使用して見つけることができない場合は、確認してくださいすべてのポストバック後に、Page_Loadの前に、OnInitのような場所にコントロールを作成しています。

EDIT

私はあなたがコンテナにコンテンツを追加している方法を変更する必要があると思います。代わりに<span>を使用して、私はPanelを使用して、代わりにマークアップを構築するのは、単純にコードビハインドにパネルにコントロールを追加します。

TextBox txt = new TextBox(); 
txt.ID = String.Format("txt_{0}", Panel1.Controls.Count); 
Panel1.Controls.Add(txt);  
+0

だから私はFindControlが私にそれをアクセスする唯一の方法だと思います。私はそれに直接アクセスすることはできません。下の@sylenceは参照の追加について言及しましたが、それはあまり明確ではありません。 –

+0

はい、動的コントロールにアクセスするには 'FindControl'が必要です。直接アクセスすることはできません。 –

+0

私はこのコードを試しましたが、うまくいきませんでした。私のhtmlは実際にスパンの内側にあります。 'spanMap.InnerHtml = aContent;'内部にはテーブルがあり、テーブルの内側にはテキストボックスがあります。 2番目のコードブロックで 'TextBox'を' TextBox(...) 'に変更する必要があります。 –

1

ここでは例です:

<%@ Page Language="C#" %> 
<script type="text/C#" runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     var textBox = new TextBox(); 
     textBox.ID = "myTextBox"; 
     textBox.Text = "hello"; 
     Form1.Controls.Add(textBox); 
    } 

    protected void BtnTestClick(object sender, EventArgs e) 
    { 
     var textBox = (TextBox)Form1.FindControl("myTextBox"); 
     lblTest.Text = textBox.Text; 
    } 
</script> 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <form id="Form1" runat="server"> 
     <asp:LinkButton ID="btnTest" runat="server" Text="Click me" OnClick="BtnTestClick" /> 
     <asp:Label ID="lblTest" runat="server" /> 
    </form> 
</body> 
</html> 
+0

+1:良い例 –

関連する問題