0

以下のコードを使用して、ページの読み込み時にプログラムでテキストボックスを作成しました。

HtmlTableRow row = new HtmlTableRow();
HtmlTableCell cell1 = new HtmlTableCell();
HtmlTableCell cell2 = new HtmlTableCell();
cell1.Controls.Add(new Label() { ID = LableID1, Text = Name });
cell2.Controls.Add(new TextBox() { ID = TextBoxID1 });
row.Cells.Add(cell1);
row.Cells.Add(cell2);
dynamictable.Rows.Add(row);

ボタンクリックイベントでは、テキストボックスから値を取得し、その値を以下のように静的に作成された別のテキストボックスに割り当てようとしています:

string id = TextBoxID1                       
TextBox tb = (TextBox)dynamictable.FindControl(id);                        
string valuetext = tb.Text;
TextBox1.Text = valuetext;

オブジェクト参照エラーが発生しています。つまり、コントロールを検索して TextBox を作成することができません。

以下の方法でもTextBoxを作成しようとしました:

TextBox tb = (TextBox)form1.FindControl(id);                        
TextBox tb = (TextBox)this.form1.FindControl(id);                        
TextBox tb = (TextBox)page.FindControl(id);  

どんな助けでも私にとって非常に役に立ちます。

4

4 に答える 4

0

非表示フィールドを使用して、動的に作成されたテキスト ボックスの値を Java スクリプトに格納する

runat="server"隠しフィールドにも追加

非表示フィールドからテキストボックスの値にアクセスできます。

もう 1 つの方法は、JavaScript を使用してその値をクエリ文字列に格納し、バックエンドで読み取ることです。

于 2013-02-07T08:43:44.307 に答える
0

行を見つけてからセルを見つけてから、テキストボックスを見つける必要があると思います。

これを行うことを意味します:

TextBox tb = (TextBox)dynamictable.FindControl(id);   

最初に特定の行を見つける必要があります

// find by it or index etc
HtmlTableRow tb = (HtmlTableRow)dynamictable.FindControl(id);  

// Then find the Table cell and then find textbox..

これがお役に立てば幸いです

于 2012-08-10T06:14:27.760 に答える
0

テーブルを作成するメソッドがあるかもしれません。ポストバックでそれを呼び出して、すべてがセットアップされていることを確認する必要があります。

protected HtmlTable dynamictable;
protected TextBox tb = new TextBox();


protected override void OnInit(EventArgs args)
{
 base.OnInit(args);
 CreateTableRows();
}

private void CreateTableRows()
{
 HtmlTableRow row = new HtmlTableRow();
 HtmlTableCell cell1 = new HtmlTableCell();
 HtmlTableCell cell2 = new HtmlTableCell();
 cell1.Controls.Add(new Label() { ID = LableID1, Text = Name });
 cell2.Controls.Add(tb });
 row.Cells.Add(cell1);
 row.Cells.Add(cell2);
 dynamictable.Rows.Add(row);
}

protected void OnClick(object sender, EventArgs args)
{
 return tb.Text;
}
于 2012-08-10T06:15:55.213 に答える
0

動的コントロールを操作するには、 ASP.Net ページのライフサイクルを完全に理解する必要があります

動的コントロールは各投稿で再作成する必要があります。動的コントロールを作成する背後にある魔法はありません。悲しいことに、それらを明示的に作成する必要があります。

ページは、リクエストを実行するときに作成され、レスポンスがユーザーに返されるときに破棄される単なるクラスであることに注意してください。したがって、コントロールは毎回再作成する必要があります。これは、コントロールがページで静的に宣言されている場合に行われます。ただし、動的コントロールでは、投稿ごとに再作成する必要があります

@BobTodd が提供するコードは良い出発点ですが、Microsoft からの推奨事項は、Page_Initイベントを残りの静的コントロールと同期させるために、動的コントロールをイベント内に作成することです。

したがって、コードは次のようになります。

protected void Page_Init(object sender, EventArgs e)
{
 CreateTable();
}

ここで、この単純なルールを覚えておいてください。動的コントロールを操作するときは、常に同じIDを使用してください。コントロールの ID に基づいてページのビューステートが読み込まれるため、これは非常に重要です。

考慮すべきもう 1 つの点は、イベントで作成されたすべてのコントロールは、ページ上のすべてのコントロールでメソッドが呼び出されるInitまでビューステートをロードしないことです。LoadViewStateこれは、Page_PreLoadまたはPage_Loadイベントをサブスクライブする場合、コントロールのプロパティを安全に設定できることを意味します。これらの値はビューステートから既に読み込まれているため、新しい値は上書きされません。

これは、PreLoadイベントの前にコントロールに割り当てられたすべてのプロパティが、ページのビューステート値に置き換えられることを意味します。したがって、viewstate が読み込まれた後に動的コントロールのプロパティを設定することをお勧めします。

クイック ビューとして、ASP.Net ページのライフ サイクルを確認します。

ここに画像の説明を入力

于 2012-08-10T06:26:32.413 に答える