Получить текст из динамически созданного текстового поля в asp.net

Я бился головой об это все утро, так что, надеюсь, я смогу помочь. По существу, у меня возникают проблемы с получением значений из некоторых элементов управления текстовым полем, которые я создаю динамически в .net 4.

Вот требуемый поток заявки.

1). Пользователь выбирает HTML-документ из выпадающего меню, который является шаблоном для письма. Этот HTML-документ содержит теги формата $ VARIABLENAME $, которые будут заменены правильными значениями.

2). Программа запускается через шаблон и извлекает все строки в формате $ STRING $ и сохраняет их в списке.

3). Для каждой записи в этом списке программа генерирует метку asp: label и asp: text с уникальным идентификатором на основе исходного поля $ VARIABLENAME $.

4). Пользователь вводит заменяющие значения, а хиты отправляют.

5). Программа заменяет все $ STRING $ значениями замены и выводит результат.

Все работает хорошо до того момента, когда мне нужно получить значения из текстовых полей. Я совершенно уверен, что это проблема жизненного цикла страницы, но поскольку текстовые поля не генерируются до тех пор, пока пользователь не выберет нужный шаблон из раскрывающегося списка, я не уверен, как заставить их сохраняться в постбэках, чтобы я мог ссылаться на них. их.

Я все об этом ошибаюсь? Как получить доступ к текстовым полям, созданным из выпадающего события после того, как произошло событие обратной передачи?

РЕДАКТИРОВАТЬ: Вот большая часть соответствующего кода.

protected void createTextBoxes(List<string> results)
    {
        if (results != null)
        {
            foreach (string result in results)
            {
                string formattedResult = result.Substring(1, result.Length - 2);
                formattedResult = formattedResult.ToLower();
                formattedResult = char.ToUpper(formattedResult[0]) + formattedResult.Substring(1);


                var label = new Label();
                label.ID = formattedResult;
                label.Text = formattedResult + ": ";
                templateFormPlaceholder.Controls.Add(label);

                var textBox = new TextBox();
                textBox.ID = result;
                templateFormPlaceholder.Controls.Add(textBox);
                templateFormPlaceholder.Controls.Add(new LiteralControl("<br />"));

                previewBtn.Visible = true;
            }
        }
    }

protected void templateDD_SelectedIndexChanged(object sender, EventArgs e)
    {
        var templatePath = "";
        if (templateDD.SelectedIndex == 0)
        {
            previewBtn.Visible = false;
        }

        if (templateDD.SelectedIndex == 1)
        {
            templatePath = employeePath;
        }
        else if (templateDD.SelectedIndex == 2)
        {
            templatePath = managerPath;
        }
        List<string> regMatches = FindMatches(templatePath);
        Session["regMatches"] = regMatches;
        createTextBoxes(regMatches);
    }

protected void Page_Init(object sender, EventArgs e)
    {
        if (Session["regMatches"] != null)
        {
            createTextBoxes((List<string>)Session["regMatches"]);
        }
    }

Позже я пытаюсь добавить значения из этих текстовых полей в словарь. Параметры - это название словаря. Ключевое поле - $ STRING $, результат - то, что пользователь ввел в текстовое поле.

   protected void previewBtn_Click(object sender, EventArgs e)
    {
        List<string> matchResults = (List<string>)Session["regMatches"];
        Dictionary<string, string> parameters = new Dictionary<string, string>();
        foreach (string result in matchResults)
        {
            TextBox tb = (TextBox)templateFormPlaceholder.FindControl(result);
            parameters.Add(result, tb.Text);
        }

        var template = ReplaceKeys(parameters);
        outputLBL.Text = template;

Вот код .aspx.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="offerLetter.aspx.cs"     Inherits="templateRegexTesting.offerLetter" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
    <p>
        Which template would you like to use?
    </p>
    <asp:DropDownList ID="templateDD" runat="server" OnSelectedIndexChanged="templateDD_SelectedIndexChanged"
        AutoPostBack="true">
        <asp:ListItem></asp:ListItem>
        <asp:ListItem Value="1">Employee</asp:ListItem>
        <asp:ListItem Value="2">Manager</asp:ListItem>
    </asp:DropDownList>
    <br />
    <asp:PlaceHolder ID="templateFormPlaceholder" runat="server" />
    <div>
        <asp:Button ID="previewBtn" runat="server" Text="Preview" Visible="false" OnClick="previewBtn_Click" />
    </div>
    <div>
        <asp:Label ID="outputLBL" runat="server"></asp:Label>
    </div>
    <br />
</div>
</form>
</body>
</html>

РЕДАКТИРОВАТЬ: я положил это в комментарии, когда я понял это, но я решил, что я должен переместить это в вопрос, чтобы он был более заметным:

Я думал, что я должен обновить это. Я чувствую себя немного идиотом, но мне удалось заставить это работать. По сути, я назначал элементам управления идентификатор, равный токенам замены (например, ID = & quot; $ FIRSTNAME $ & quot;). До меня даже не дошло, что $ могут вызвать какие-либо проблемы. Когда я только что изменил формат ID = & quot; Имя & quot; это работает отлично. Спасибо за всю помощь!

Ответы на вопрос(3)

Ваш ответ на вопрос