In fact, you create text fields with the Text property set by default = ""; Therefore, you need to set the txt.Text property, for example:
public void txtExtra_TextChanged(object sender, EventArgs e) { for (int a = 1; a <= int.Parse(txtExtra.Text); a++) { TextBox txt = new TextBox(); txt.ID = "txtquestion" + a; txt.Text = "Some text";
EDIT:
After that you can save your values in the list:
private static List<string> values = new List<string>(); protected void btnConfirm_Click(object sender, EventArgs e) { foreach (Control ctr in pholder.Controls) { if (ctr is TextBox) { string value = ((TextBox)ctr).Text; values.Add(value);
EDIT: Here are your values: 
EDIT: For a super mega better understanding: Create another txtOutput text box, then add the GetDataFromTextBoxesAndPutItBelow button and create an event for this `Click 'button. Event ID:
protected void btnGetData_Click(object sender, EventArgs e) { for (int i = 0; i < values.Count; i++) txtOutput.Text += "Value from txtquestion1: " + values[i] + " "; }
Screenshot looks like: 
source share