在PostBack上动态创建Textboxes松散值

时间:2012-08-07 07:56:36

标签: c# asp.net updatepanel

我正在使用ASP.NET/C#

在我的某个页面中,我使用Update Panel。在我的Update Panel内,我有一个LinkButton,在Textbox内添加了Update Panel

Textboxes是动态创建的,并且工作正常。但是当我click相同的Linkbutton添加下一个Textbox时,我之前{{1}的值失去了。

我认为这是因为Textbox

以下是我创建PostBack的代码。

Textboxes

有人可以帮我解决这个问题吗?

欢迎提出任何建议。

3 个答案:

答案 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:&nbsp;</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);
            }
        }