【问题标题】:postBack issue when programmatically adding web controls以编程方式添加 Web 控件时的回发问题
【发布时间】:2011-11-21 10:53:20
【问题描述】:

我有一个问题,我似乎找不到解决方案,即使有非常相似的问题。

基本上,我有在我的 Page_Load 方法中以编程方式创建的文本框。它们填充了来自某些 cookie 的值。

然后我有一个“更新”按钮,当单击该按钮时,应该会更新加载到文本框中的 cookie。

所以我给了文本框的ID,和cookie同名,然后在更新按钮的On_Click方法上,循环遍历文本框,用文本中的值更新cookie(ID名)盒子。

但是,这不起作用。我尝试过的如下。

这些控件只是在 onload 方法中创建的。然后,当您在更改文本框后单击按钮时,再次调用 onload 方法,从而将文本框更改回原来的状态并按原样更新。

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

我尝试了EnableViewState,但没有成功,我尝试在(Page.IsPostBack) 时自行创建控件,但仍然没有。

有什么想法吗?

【问题讨论】:

  • 您真的确定需要像这样以编程方式创建控件吗?你让自己的事情变得更加困难。如果您需要控件的动态编号,最简单的方法是使用Repeater。如果您确实需要继续这样做,这一系列的博客文章将有很大帮助:weblogs.asp.net/infinitiesloop/archive/2006/08/25/…2800_Part-1_2900.aspx
  • 我会调查中继器。甚至从未听说过。我通常从不以编程方式进行控制,只是在这种情况下,我永远不会知道页面上有多少。

标签: c# asp.net webforms dynamic-controls


【解决方案1】:

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

【讨论】:

  • +1 使用 onLoad 的好处是您可以访问页面上其他控件的值,同时您的新控件将在回发时设置它们的值。跨度>
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    相关资源
    最近更新 更多