2011-11-21 97 views
1

我有一个问题,即使存在非常类似的问题,但我似乎找不到解决方案。以编程方式添加Web控件时的postBack问题

基本上我有我的Page_Load方法以编程方式创建的文本框。他们充满了某些cookie的价值。

然后我有一个'更新'按钮,点击后,它应该更新加载到文本框中的cookie。

因此,我给了文本框的ID,与cookie相同的名称,然后在更新按钮的On_Click方法中,我循环访问文本框,并用cookie中的值更新cookie(ID名称)文本框。

但是,这是行不通的。我试过的如下。

控件只是在onload方法中创建的。然后,当您更改文本框后单击该按钮时,再次调用onload方法,从而将文本框更改回原始并按照原来的方式进行更新。

在检查if (!Page.IsPostBack)后,控件在onload方法中创建。这不起作用,因为首先调用页面加载方法,并且不会在屏幕上创建控件。你的左边是空白屏幕,没有更新的cookies。

我试过EnableViewState哪些没有工作,我试图创建自己的控件时(Page.IsPostBack)但仍然没有。

任何想法?

+0

你真的确实需要像这样以编程方式创建控件吗?你正在为自己做更多的事情。如果你需要一个动态的*数字*的控件,最简单的方法是使用'Repeater'。如果你确实需要继续这样做,这一系列的博客文章将会非常有帮助:http://weblogs.asp.net/infinitiesloop/archive/2006/08/25/TRULY-Understanding-Dynamic-Controls-_2800_Part -1_2900_.aspx –

+0

我看着一个Repeater。从来没有听说过它。我从来没有经常以编程方式进行控制,只是在这种情况下,我永远不会知道我在页面上有多少。 – MichaelMcCabe

回答

3

应该在onLoad方法中创建控件并在if (!Page.IsPostBack)代码块中为它们提供初始值。这样您每次都会创建控制树,但不会重新初始化丢失更新值的值。

+0

+1关于使用onLoad的好处是,您可以访问页面上的其他控件的值,并且同时您的新控件在回发时将设置其值。 –

1

您应该在Init事件期间创建控件,并且您需要在每次加载时都这样做(不检查IsPostBack)。为了让这些控件提升回发并从视图状态设置它们的属性,它们需要在触发事件之前进入页面架构。

如果您只是在Init过程中创建控件,然后在检查IsPostBack后仅设置Load事件中的数据,则它们将保留在网站上输入的文本,因为它们将首先被初始化,然后从视图状态数据填充。

相关问题