2

我想在运行时创建动态文本框。假设我从数据库中获取文本为“# is the capital of India”,现在我想用文本框替换“#”,同时将其呈现给用户,如下所示

<asp:TextBox runat="server" id = "someid"></asp:TextBox> is the capital of India

我能够将文本框和文本组合在一起。但是,我无法访问具有给定 id 的文本框,并且当页面上发生任何事件时,文本框会丢失,因为它们在逻辑上不存在,直到它们的状态被存储。

我还研究了占位符和 Viewstate 的概念来存储动态创建的控件并使它们的 id 可用于方法,但就我而言,我无法满足文本框和文本组合的要求。

我遍历从数据库收到的整个文本并检查是否有任何“#”。是的,那么我想用一个文本框替换它,我可以在该文本框上调用方法将在文本框中输入的值取回数据库并存储它。

eg: text is "#" 是印度的首都

for (int i = 0; i < que.Length; j++)  //que holds the text
        {
            if (que[i] == '#')
            {
                  //Textbox should be created
            }
            else
            {
                    //the texts should be appended before or after the textbox/textboxes as text demands
            }
        }

单击按钮时,我将请求传递给数据库,这将向我发送必要的详细信息,即问题文本、选项以及保存当前检查的值等。

 protected void BtnLast_Click(object sender, EventArgs e)
{
    CheckBox1.Checked = false;
    CheckBox2.Checked = false;
    CheckBox3.Checked = false;
    CheckBox4.Checked = false;

    QuestionSet q = new QuestionSet();
    StudentB b = new StudentB();

    q = b.GetQuestion(1, 1, qid, 'L', 0, Checked, date);

    qid = Convert.ToInt32(q.Question_Id);
    Checked = q.Checked;

    if (q.Question_Type == 11) //indicates its objective Question
    {
        //ill bind data to checkboxes
    }
    else if (q.Question_Type == 12) // indicate its fill in the blanks question
    {
        for (int j = 0; j < que.Length; j++)
        {
            if (que[j] == '#')
            {
                  count++;
                  string res = "<input type = 'text' runat = 'server' id ='TxtBoxFillUp" + count + "'/>";

                    htm = htm.Append(res);

            }
            else
            {
                    htm = htm.Append(que[j]);
            }
        }

    }

}

任何帮助将不胜感激,在此先感谢。

4

2 回答 2

2

以您的方式添加控件不会像 asp.net 创建控件那样创建控件。您必须像往常一样创建控件 .net 对象。

TextBox myNewTextBox = new TextBox() {};
// Set all initial values to it

并将此控制添加到占位符或面板,无论您使用什么。请记住,即使您使用更新面板,asp.net 页面事件也会触发,因此为了维护新创建控件的状态和事件,您必须在页面Load事件触发之前很久就创建此类控件。是我对另一个类似问题的回答。

于 2013-07-12T09:18:15.480 回答
1

看到你的要求:

1.) 你需要使用 JavaScript。因为 ASP.NET 不会重新创建动态添加的控件。每次回发后都需要重新创建动态添加的控件。这就是每次回发后您的文本框都会丢失的原因。

2.) 您可以编写 JavaScript 代码来隐藏和显示空白文本的文本框,因为在每次单击按钮时,您都可以使用以下方法调用客户端函数:按钮的 OnClientClick() 属性。

3.)还要使用 ID 属性获取文本框,将它们添加到标记(.aspx)部分本身。

于 2013-07-12T12:22:52.830 回答