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 回答