我想在运行时创建动态文本框。 假设我从数据库中获取文本为“#是印度的首都”,现在我想用文本框替换“#”,同时将其呈现给用户,如下所示
<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]);
}
}
}
}
任何帮助将不胜感激,提前感谢。
答案 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)部分本身。