回发后TextBox值将丢失 [英] TextBox values are lost after postback
本文介绍了回发后TextBox值将丢失的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
您好我正在动态创建文本框,然后将值插入到生成的每个文本框中,所以我想获取按钮的click事件的值,但是一旦按钮被触发,值就不会加载到页面中......
1.这是我的Html标记:
Hi I am creating textboxes dynamically,then insert values to each textbox generated,so I want to get the values on click event of a button but once a button is get fired, the values are not loaded in a page...
1.This is my Html markup:
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtNumber" runat="server" ></asp:TextBox>
<br />
<asp:Button ID="btn" runat="server" Text="Generate" OnClick="GenerateTextBoxes_onClick" />
<asp:Panel ID="pnlDate" runat="server"></asp:Panel>
</div>
<div>
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btn_Click" />
</div>
</form>
And这是我正在使用的代码隐藏文件:
And This is my code behind file I am using:
protected void Page_Load(object sender, EventArgs e)
{
}
protected void GenerateTextBoxes_onClick(object sender, EventArgs e)
{
int number = Convert.ToInt32(txtNumber.Text);
string top = "";
int left = 0;
TextBox txt;
Table tb = new Table();
tb.ID = "tb1";
TableRow tr = new TableRow();
for (int i = 1; i <= number; i++)
{
txt = new TextBox();
txt.ID = "textBox" + i.ToString();
txt.Attributes.Add("runat", "server");
txt.CssClass = "myDates";
txt.Width = Unit.Pixel(240);
txt.MaxLength = 1;
txt.EnableViewState = true;
txt.Style.Add(HtmlTextWriterStyle.Position, "relative");
txt.Style[HtmlTextWriterStyle.Left] = left + "px";
left += 5;
TableCell tc = new TableCell();
tc.Controls.Add(txt);
tr.Controls.Add(tc);
tb.Controls.Add(tr);
Panel1.Controls.Add(txt);
} // [edit] The brackets were not balanced, I'll assume this one belongs here?
pnlDate.Controls.Add(tb);
}
public void btn_Click(object sender, EventArgs e)
{
//GenerateTxtB();
Table t = (Table)Page.FindControl("pnlDate").FindControl("tb1");
TextBox textbox;
foreach (TableRow tr in t.Rows)
{
foreach (TableCell tc in tr.Cells)
{
foreach (Control c in tc.Controls)
{
if (c.GetType() == typeof(TextBox))
{
textbox = (TextBox)c;
Response.Write("TextBox Value is:" + textbox.Text + "<br/>");
}
}
}
}
}
可以帮助我如何保持值,然后像我对response.write(...)
Can some help me how to keep the values and then display them as I did with the response.write(...)
推荐答案
那样显示它们
动态创建的控制值在回发时总是变为空白。使用javascript事件来获取所有文本框值。
Hi,
dynamically created control value always get blank at time of postback. Use instead javascript event to get all textbox values.
您好,当回发发生时,您无法获得动态创建的控件值,您可以做的一件事是在GenerateTextBoxes_onClick事件中创建动态文本框,在页面加载中执行它,因为页面加载首先在按钮点击时触发,你可以获取值。
Hi you cannot get the dynamicaaly created control values when postback happens, one thing you can do is instead of creating dynamic text box in GenerateTextBoxes_onClick event,do it in page load since page load fires first on button click,u can get the values.
检查下面的代码我修改了一些部分(即页面加载和生成控制事件)我认为这会解决你的问题
Check the below code i have modify some of the section (i.e. page load and generate control event. I think this will solve your problem
protected void Page_Load(object sender, EventArgs e)
{
CreateCOntrols();
}
protected void GenerateTextBoxes_onClick(object sender, EventArgs e)
{
pnlDate.Controls.Clear();
CreateCOntrols();
}
private void CreateCOntrols()
{
if (txtNumber.Text != "")
{
int number = Convert.ToInt32(txtNumber.Text);
string top = "";
int left = 0;
TextBox txt;
Table tb = new Table();
tb.ID = "tb1";
TableRow tr = new TableRow();
for (int i = 1; i <= number; i++)
{
txt = new TextBox();
txt.ID = "textBox" + i.ToString();
txt.Attributes.Add("runat", "server");
txt.CssClass = "myDates";
txt.Width = Unit.Pixel(240);
txt.MaxLength = 1;
txt.EnableViewState = true;
txt.Style.Add(HtmlTextWriterStyle.Position, "relative");
txt.Style[HtmlTextWriterStyle.Left] = left + "px";
left += 5;
TableCell tc = new TableCell();
tc.Controls.Add(txt);
tr.Controls.Add(tc);
tb.Controls.Add(tr);
//pnlDate.Controls.Add(txt);
pnlDate.Controls.Add(tb);
}
}
}
public void btn_Click(object sender, EventArgs e)
{
Table t = (Table)Page.FindControl("pnlDate").FindControl("tb1");
TextBox textbox;
foreach (TableRow tr in t.Rows)
{
foreach (TableCell tc in tr.Cells)
{
foreach (Control c in tc.Controls)
{
if (c.GetType() == typeof(TextBox))
{
textbox = (TextBox)c;
Response.Write("TextBox Value is:" + textbox.Text + "");
}
}
}
}
}
这篇关于回发后TextBox值将丢失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文