asp.net中的动态控件(文本框)

时间:2013-07-12 05:10:43

标签: asp.net dynamic controls

我想在运行时创建动态文本框。 假设我从数据库中获取文本为“#是印度的首都”,现在我想用文本框替换“#”,同时将其呈现给用户,如下所示

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

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

我还经历了占位符和Viewstate的概念来存储动态创建的控件并使其id可用于方法,但据我尝试,我无法满足文本框和文本组合要求。

我循环从数据库收到的整个文本并检查是否有“#”。是的然后我想用一个文本框替换它,我可以调用方法将文本框中输入的值恢复到数据库并存储它。

例如:text是“#”是印度的首都

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]);
            }
        }

    }

}

任何帮助将不胜感激,提前感谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

查看您的要求:

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

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

3。)另外,要使用ID属性获取TextBox,请将它们添加到Markup(.aspx)部分本身。