【问题标题】:Why is __doPostBack() not firing my bound load events?为什么 __doPostBack() 没有触发我的绑定加载事件?
【发布时间】:2011-08-31 15:59:31
【问题描述】:

情况如下:我的页面上有多个动态创建的更新面板,所以我想我会编写一种方法来处理每个更新面板的所有加载。

我的Updatepanel 创作看起来像这样:

 Dim newUpdp As New UpdatePanel
 newUpdatep.ChildrenAsTriggers = False
 newUpdatep.UpdateMode = UpdatePanelUpdateMode.Conditional
 newUpdatep.ID = Guid.NewGuid.ToString

 AddHandler newUpdatep.Load, AddressOf updatep_load_method
 updatep_Holder.ContentTemplateContainer.Controls.Add(newUpdp)
 updatep_Holder.Update()  

这将创建更新面板并将其加载事件绑定到方法“updatep_load_method”。只要将Updatepanel 插入支架,就会调用此方法。方法代码如下:

Private Sub updp_load_method(sender As UpdatePanel, e As System.EventArgs)
   Dim div As New HtmlGenericControl("div")
   div.InnerText = Date.Time.Now.ToString
   sender.ContentTemplateContainer.Controls.Add(div)
   sender.Update()
End Sub

稍后我想更新面板,并刷新时间。所以我使用javascript __doPostBack 方法。根据Dave Ward,__doPostBack 方法遵循整页回发生命周期,所以我认为我的更新面板的加载事件将被触发,并且该特定更新面板将调用“updatep_load_method”...

虽然发生了部分回发,并且调用了其他更新面板的加载事件,但我的绑定事件没有。那么这里发生了什么?

【问题讨论】:

  • 您是在回帖中再次添加更新面板吗?
  • @Tejs,我想知道这是否会发生 - 就像我可能正在重新创建控件但没有再次绑定它们或类似的东西。明天我会试试詹姆斯约翰逊的答案,看看我的进展如何。

标签: javascript asp.net vb.net updatepanel postback


【解决方案1】:

您需要在Page_Init 期间重新创建动态控件,并且必须使用相同的Id(因此您不能在重新创建控件时执行Guid.NewGuid.ToString())。

否则,ASP.Net 将无法找到您的控件并使用来自ViewState 的数据填充它。

这是一个很好的article,它解释了有关动态控件的更多信息。

【讨论】:

  • 谢谢@Mrchief,我一定会试一试的。您对检索更新面板的 ID 有什么建议,以便我可以使用相同的 ID 重新创建吗?或者您会建议一开始就不要使用 GUIDS?我使用它们的唯一原因是为每个动态创建的面板实现唯一的 ID。
  • 您需要以某种方式跟踪 ID。我建议您将其基于一些已知的属性,您也可以在重新创建时使用这些属性。如果不进一步深入了解代码,就很难说。如果可能,请避免使用动态控件并尽可能避免使用 UpdatePanels!
  • 我听取了您关于不使用动态面板的建议 - 我发现使用一些控件预填充页面更容易(所以我事先知道 ID),然后在 page_init 期间重新绑定 onload 为你建议。
【解决方案2】:

尝试在您的代码中实现 RaisePostBackEvent 方法:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument);

   //add whatever code you need to execute on postback here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 2012-01-11
    • 1970-01-01
    • 2011-05-05
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多