4

C# のコード ビハインドから aspx テキスト ボックスを作成する方法と、コード ビハインドでその値にアクセスする方法を教えてください。私は次のようにしますが、ポストバックごとにテキストボックスがクリアされます。ポストバックでその値を保持する必要があります。

TextBox txt = new TextBox();
txt.ID = "strtxtbox";
txt.CssClass = "CSS1";
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
txt.RenderControl(htmlWriter);

//lbl is an aspx label
lbl.text += @"<td style='width: 5%;'>" + sb.ToString() + "</td>";

そして、次のようにテキストボックスの値にアクセスします

string tb = Request.Form["strtxtbox"].ToString();
4

4 に答える 4

5

TextBoxコントロールを作成することから始めることができます。Init()Page_Init())またはPreInit()( )メソッドで実行する必要Page_PreInit()があり、。に関係なく実行する必要がありますPage.IsPostBack。これにより、が読み込まれる前に要素がページに配置ViewStateされ、ポストバックで値を取得できるようになります。

var textBox = new TextBox();

次に、後で見つけられるように、IDを含むいくつかのプロパティを設定する必要があります。

textBox.ID = "uxTxtSomeName";
textBox.MaxLength = 10; // maximum input length
textBox.Columns = 20; // character width of the textbox
etc...

Page次に、ページ上の適切なコンテナ( 、または表示するコントロール)に追加する必要があります。

parentControl.Controls.Add(textBox);

次に、ポストバック時に、おそらく親の関数を使用するLoad()メソッド( )で値を取得できます。Page_Load()FindControl()

var input = (parentControl.FindControl("uxTxtSomeName") as TextBox).Text;

注:組み込みは、FindControl()直接の子を介してのみ反復します。ネストされたサーバーコントロールのツリー全体を検索する場合は、独自の再帰 FindControl()関数を実装する必要があります。FindControl()ただし、[so]には100万と1つの再帰関数の例があるので、それはあなたに任せます。

于 2012-06-13T13:48:36.927 に答える
1

これを確認してください。実行時にコントロールを追加するための完全な例が示されています http://www.codeproject.com/Articles/8114/Dynamically-Created-Controls-in-ASP-NET

http://geekswithblogs.net/dotNETvinz/archive/2009/03/17/dynamically-adding-textbox-control-to-aspnet-table.aspx

于 2012-06-13T13:47:37.187 に答える
1

問題は、毎回再作成しない限り、ポストバックでコントロールを使用できないことです。これには問題があります。

私が過去に使用したソリューションの1つは、DynamicControlsPlaceholderです。ここで確認できます。

于 2012-06-13T13:48:26.927 に答える
0

コメントのコードに従ってテキストボックスを作成します

TextBox myTextBox=new TextBox();

ただし、ID/名前を設定する必要があります。さらに、値が入力されるように、レンダリング前または前に、すべてのポストバックにテキストボックスを作成する必要があります。テキストボックスの作成をページライフサイクルの後半まで遅らせると、値はポストバックから入力されないため、Request.Response[]コレクションから手動で取得する必要があります。

于 2012-06-13T13:48:20.093 に答える