2

asp.net フォームで問題が発生しました。

私のフォーム内で、エンドユーザーは動的に作成するテキストボックスの数を選択します。これはすべて、次のコードで正常に機能します。

protected void txtAmountSubmit_Click(object sender, EventArgs e)
    {
        int amountOfTasks;
        int.TryParse(txtAmountOfTasks.Text, out amountOfTasks);
        for (int i = 0; i < amountOfTasks; i++)
        {
            TextBox txtAddItem = new TextBox();
            txtAddItem.ID = "txtAddItem" + i;
            txtAddItem.TextMode = TextBoxMode.MultiLine;
            questionNine.Controls.Add(txtAddItem);
            txtList.Add(txtAddItem.ID);
        }
    }

ただし、これにより小さな問題も発生しました。後でフォームの送信ボタンをクリックすると、結果が必要な指定された人に送信されます (smtp 電子メールを使用)。これらの動的に作成された textboxes からテキストを取得しようとするまで、この部分は問題ありません。

私が試したこと

  1. この msdn アクセス サーバー コントロール ID メソッドを使用しようとしましたが、うまくいきませんでした。

  2. これらの新しいテキスト ボックスをリストに追加しようとしましたが、テキストが含まれている場合にこれらのテキスト ボックスを更新する方法がわかりませんでした。したがって、このため、結果は null を返していました。

  3. これなどのSOに関する他の質問も見ましたが、通常、asp.netの問題ではなく、WPFまたはwinformに関するものです(これは通常問題ではありませんが、すべてからテキストを取得する必要はありません私のページのテキストボックスコントロール、動的に作成されたものだけ)。

また、機能することを望んでいたコードの呼び出し方法を変更してみました。

string textboxesText = string.Join("\n", txtList.Select(x => x).ToArray());

次に、連結された文字列 (電子メール本文) で次のように呼び出します。

textboxesText

問題

それらは動的に作成されるため、たとえば txtExampleID.Text などの ID でそれらを呼び出すのは難しいと感じています。また、ID を毎回 1 つずつインクリメントする必要があるため (相互にオーバーライドしないように)、物事を私にはもう少し難しい。

私はコードの解決策を求めているわけではありません。私はまだ学んでいるので、正しい方向へのポインタを好むでしょう。

要約すると、動的に作成されたテキストボックスからテキストを取得して、メール本文に追加する必要があります。

4

1 に答える 1

2

問題は、イベントと値の両方をフックして取得できるように、ページのイベントで毎回これらのテキスト ボックスを再作成する必要があることです。Load

あなたの場合、最も簡単なアプローチは、あなたがすでに試したアイデア#1を拡張することだと思います。で再作成するListのに十分な情報を使用してこれらのコントロールを作成しますが、それを またはのいずれかにLoad格納する必要があります。ListViewStateSession

ViewState["DynamicControls"] = list;

また

Session["DynamicControls"] = list;

ViewStateユーザーがページを離れると破棄されるため、可能であれば使用します。

于 2013-07-10T15:09:40.950 に答える