1

ASP.NETページでプログラムによって多くのテキストボックスを構築しています。ボタンをクリックした後、それらの値を処理したいのですが、ViewStateのIDからそれらを取得する可能性はありますか?

これが私のコードです:

aspx内のテーブルの参照:

<asp:Table ID="Distances" runat="server" ViewStateMode="Inherit"></asp:Table>

次に、すべての行とセルを作成した後のコードビハインドで、それらのいくつかにテキストボックスを追加します。

Distances.Rows[j].Cells[i].Controls.Add(CreateTB(distance.ToString(), (i + j * rows).ToString(), false));

    protected TextBox CreateTB(string text, string id, bool ebanled = true)
    {
        TextBox tb = new TextBox() { Text = text, ID = id, Enabled = ebanled};
        tb.TextChanged += new EventHandler(OnTBChanged);
        return tb;
    }
4

1 に答える 1

1

ViewStateはデフォルトで有効になっているため、Textプロパティがポストバック間で永続化されることはすでに機能しているはずです。

したがって、たとえば、FindControl("TextBoxID")それらを使用または列挙して、TextBox(のようなコンテナコントロールに追加されていると仮定して)への参照を取得できますPanel

foreach(TextBox txt in MyPanel.Controls.OfType<TextBox>())
{
    String text = txt.Text;
}

また

TextBox txt = (TextBox)MyPanel.FindControl("TextBox1")
String text = txt.Text;

TextBoxesポストバックでそれらを再現していないと思います。したがって、以前と同じIDを使用しPage_Load、ページのライフサイクルの最新の段階でそれらを再作成する必要があります。したがって、イベントでそれらを作成することはできますが、そこで再作成することはできません。

動的に作成する場所にコードを表示する必要があります。そうすれば、より具体的になる可能性があります。

動的制御を真に理解する

于 2012-10-19T13:59:29.753 に答える