使用FindControl C#找不到文本框

时间:2016-04-07 04:34:48

标签: c# asp.net .net findcontrol

我遇到了一个试图在同一页面上找到文本框控件的问题。当我调试它时,它一直给我一个null。

这是我的代码:

public void UpdateTimeLog(string input)
    {
        string timeNumber = "txtTime" + input;
        TextBox myTextbox = (TextBox)FindControl(timeNumber);

        sqlConnection.Open();
        using (var command = new SqlCommand("UPDATE [JobSheet] SET [Time" + input + "]=@Time" + input + " WHERE [JobShtId]=@JobShtId", sqlConnection))
        {
            command.Parameters.AddWithValue("@JobShtId", jobSheetId);
            command.Parameters.AddWithValue("@Time" + input + "", myTextbox.Text);
            command.ExecuteNonQuery();
        }
        sqlConnection.Close();
    }

解决了问题:我没有指定文本框控件位于容器中(例如ContentPlaceHolder1)。

以下是更正后的代码:

public void UpdateTimeLog(string input)
    {
        var container = Master.FindControl("ContentPlaceHolder1");
        string timeNumber = "txtTime" + input;
        TextBox myTextbox = (TextBox)container.FindControl(timeNumber);

        sqlConnection.Open();
        using (var command = new SqlCommand("UPDATE [JobSheet] SET [Time" + input + "]=@Time" + input + " WHERE [JobShtId]=@JobShtId", sqlConnection))
        {
            command.Parameters.AddWithValue("@JobShtId", jobSheetId);
            command.Parameters.AddWithValue("@Time" + input + "", myTextbox.Text);
            command.ExecuteNonQuery();
        }
        sqlConnection.Close();
    }

3 个答案:

答案 0 :(得分:1)

您应该将文本框作为发件人对象发送,如下所示:

UpdateTimeLog("2",(TextBox)sender);

当然你也需要修改你的方法来接受TextBox对象。

这只有在为多个文本框使用相同的事件处理程序时才有意义。

答案 1 :(得分:1)

应该是工作试试,

 TextBox myTextBox = (TextBox)(this.Controls[("txtTime" + input)]).Text);

答案 2 :(得分:1)

很难通过ID找到控制权。请尝试使用此代码

public static Control[] FlattenHierachy(Control root)
        {
            List<Control> list = new List<Control>();
            list.Add(root);
            if (root.HasControls())
            {
                foreach (Control control in root.Controls)
                {
                    list.AddRange(FlattenHierachy(control));
                }
            }
            return list.ToArray();
        }

  public void UpdateTimeLog(string input)
        {
            string timeNumber = "txtTime" + input;
           // TextBox myTextbox = (TextBox)FindControl(timeNumber);
            Control[] allControls = FlattenHierachy(Page);
            foreach (Control control in allControls)
            {
                TextBox textBox = control as TextBox;
                if (textBox != null && textBox.ID == timeNumber)
                {
                    textBox.Text = "Hello";//Do your other stuff
                }
            }

          //Rest is ommited
        }