无法从动态创建的文本框中读取值

时间:2015-10-06 12:34:02

标签: c# asp.net

我想在按钮单击事件中检索文本框值,但只要单击该按钮,就会触发回发并且值为空。我曾尝试在(!isPostBack)中创建文本框,但这似乎不起作用。

protected void Page_Load(object sender, EventArgs e)
{
     Form.Controls.Add(t);
}

protected void Page_PreInit(object sender, EventArgs e)
{
     predictionList = dc.getPredictions(Convert.ToInt32(Session["accountId"]));
     fixtureList = dc.getFixtures();
     t.CssClass = "panel panel-success table table-striped";
     sortLists();
     foreach (Fixture f in newList)
     {
          TableRow tr = new TableRow();
          TableCell tc1= new TableCell();
          TextBox tb1= new TextBox();
          tb1.ID = "tb1";
          tc1.Controls.Add(tb1);
          tr.Cells.Add(tc1);
          t.Rows.Add(tr);
     }
}

这里我添加了控件,在这里我想处理文本框中的任何内容:

protected void btSubmit_Click(object sender, EventArgs e)
{
     foreach (TableRow r in t.Rows)
     {
         string textboxRead= ((TextBox)r.FindControl("tb1")).text;
         int textboxInt = Convert.ToInt32(textboxRead);
     }
}

4 个答案:

答案 0 :(得分:0)

可能是FindControl()找不到文本框,因为它不能递归地工作吗?

即。您已将TextBox添加到TableCell,但您正在FindControl()上执行TableRow来电,而不是TableCell。因此要么从Cell调用FindControl(),要么使用递归版本。

对于FindControl()的递归版本,请参阅:Better way to find control in ASP.NET

答案 1 :(得分:0)

试试这个:

TextBox tb1;

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        tb1 = ((TextBox)r.FindControl("tb1"));                
    }
}

protected void btSubmit_Click(object sender, EventArgs e)
{
     string textboxRead = tb1.Text; // here you can get the tb1.Text
     int textboxInt = Convert.ToInt32(textboxRead);
}

答案 2 :(得分:0)

希望这会对你有所帮助。

boost::filesystem::path path("./myFiles/fileWithMultiExt.myExt.my2ndExt.my3rdExt");
while(!path.extension().empty())
{
    path = path.stem();
}

std::string fileNameWithoutExtensions = path.stem().string();

请参阅此链接了解详情: http://www.aspsnippets.com/Articles/Get-Value-Text-of-dynamically-created-TextBox-in-ASPNet-using-C-and-VBNet.aspx

答案 3 :(得分:0)

您需要为所有动态创建的控件提供ID。这是强制性的,以防止回发时出现任何歧义。

包括trtc1tb1甚至t控件。

另外,要查找该值,请使用以下代码段:

protected void btSubmit_Click(object sender, EventArgs e)
{
    foreach (TableRow tr in t.Rows)
    {
        var tc1 = (TableCell)tr.FindControl("tc1");
        var tb1 = (TextBox)tc1.FindControl("tb1");
        int textboxInt = Convert.ToInt32(tb1.Text);
     }
}