我正在使用ASP.NET/C#
。
在我的某个页面中,我使用Update Panel
。在我的Update Panel
内,我有一个LinkButton
,在Textbox
内添加了Update Panel
。
Textboxes
是动态创建的,并且工作正常。但是当我click
相同的Linkbutton
添加下一个Textbox
时,我之前{{1}的值失去了。
我认为这是因为Textbox
。
以下是我创建PostBack
的代码。
Textboxes
有人可以帮我解决这个问题吗?
欢迎提出任何建议。
答案 0 :(得分:2)
也许这篇MSDN文章解释了为什么会发生这种情况:Dynamic Web Server Controls and View State
您会在这篇较旧的文章中找到一个很好的解释:Dynamic Web Controls, Postbacks, and View State
如果在每个页面请求上创建了动态控件,它们将从前一个请求中获取ViewState值,因此可以在加载时创建控件,隐藏它们并在用户执行某些操作时显示它们。
此外,如果您在设计时创建的控件具有在回发后丢失值的行为,请检查您是否在某处将其EnableViewState属性设置为 false 。
您应该沿着 Id 设置控件的 Name 。该名称用于表单提交。当您有一个具有不同ID和相同名称的单选按钮列表时,最好看到这一点。提交时,将发送一对将单选按钮名称作为键并选中单选按钮的id作为值的对。
答案 1 :(得分:1)
在Postback上,可以调用这些类型的代码来重新获得Textbox的值。
txtPartName.Text = Request.Form[txtPartName.UniqueID];
对于第一次加载,我们可以在设置值之前在代码之下,如上所述。如果值首次从DB或外部绑定,这些行可能会有所帮助。
if (!string.IsNullOrEmpty(Request.Form[txtPartName.UniqueID]))
答案 2 :(得分:0)
有关在更新面板中使用动态控件的信息,请参阅Stack:
Dynamic created controls inside UpdatePanel?
你是否以下列方式实施了弗拉姆的答案?
protected void linkAddAmount_Click(object sender, EventArgs e)
{
int count = 0;
if (ViewState["ButtonCount"] != null)
{
count = (int)ViewState["ButtonCount"];
}
count++;
ViewState["ButtonCount"] = count;
for (int i = 0; i < count; i++)
{
AmountUpdatePanel.ContentTemplateContainer.Controls.Add(new LiteralControl("<span>From: </span>"));
TextBox textbox1 = new TextBox();
textbox1.ID = "txtAmountFrom" + i;
textbox1.Attributes.Add("class", "ShortTextbox");
if (!string.IsNullOrEmpty(Request.Form["txtAmountFrom" + i.ToString()]))
{
textbox1.Text = Request.Form["txtAmountFrom" + i.ToString()];
}
AmountUpdatePanel.ContentTemplateContainer.Controls.Add(textbox1);
}
}