代码之家  ›  专栏  ›  技术社区  ›  Astra

ASP.NET动态页面控件:是否可以在Page.Load之后绑定事件?

  •  0
  • Astra  · 技术社区  · 17 年前

    我有一张桌子<td>我动态创建的元素类似于此代码:

    ' Create Link Button
    lnk.ID = String.Format("lnkDetails_{0}", dr("Id"))
    lnk.Text = dr("Name").ToString()
    lnk.CommandArgument = dr("Id").ToString()
    AddHandler lnk.Click, AddressOf DetailsLink_Click
    cName.Controls.Add(lnk)
    

    这段代码对数据库中的每一行进行循环(当然,还有更多的单元格被添加到表中,包括带有事件的ImageButton。当我在Page.Load之前和之后的事件中执行此代码时,这些事件能够完美地工作。我需要能够用当前数据填充此表,这些数据在页面上其他位置的btnClick事件中更新,该事件发生在Page\u Loa之后。)d事件,因此我正在填充旧数据。如果我将此代码更改为Page.LoadComplete,则事件将停止工作。

    此数据是应用程序各个组件的摘要显示,例如某人的姓名,当在“详细信息”表单上更新时,会通过部分回发(一项要求)更新数据库,然后需要在更新后在此“摘要”部分显示更新。目前,需要2次回发才能真正看到“摘要”部分中的更改,因此,实际上摘要比更改落后1步(是否清晰为mud?)

    对于我来说,用当前数据(在Page.LoadComplete期间/之后可用)填充此表的最佳方式是什么,但在单击链接时仍会触发事件(该事件会导致UpdatePanel显示“详细信息”表单)。

    我还可以使用jQuery和常用的ASP.NET AJAX方法,而且javascript是网站的一项要求,因此我不需要为不受支持的浏览器降级。

    这是我的第一个ASP.NET web应用程序,需要一些帮助来找出实现这一点的最佳方法(我精通PHP、Django和 通常的

    更新:

    在页面加载之后,确实没有一种好方法将控件事件绑定到控件。页面的总体架构是有一个ASP.NET表单包含整个页面,只有一个aspx页面。我正在使用母版页(但是它对我的问题没有任何明显的影响)。

    这些选项卡中的任何一个的更新只刷新摘要面板( UpdatePanel.update() )以及它自己的小组。数据库摘要动态控件的“刷新”和事件绑定发生在页面加载期间,更新按钮事件更新数据库数据。(控件事件发生在页面加载之后)。我想避免为了更新摘要而重复发表文章,任何想法都是有帮助的。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Ricardo Villamil    17 年前

    在“页面上其他位置的btnClick事件”中更改数据后,您需要回发整个页面。听起来您有一个UpdatePanel,而且这好像是在捕获btnClick事件处理程序的回发。将btnClick置于UpdatePanel之外或更改其触发器,以便btnClick强制回发/刷新数据。或者,重新设计您的表格,以便当您单击btnClick时,它会快速刷新。如果您不了解更多页面和控件的结构,则很难获得更多详细信息。

    祝你好运

        2
  •  1
  •   Vilx-    17 年前

        3
  •  0
  •   Kon    17 年前

    您必须在Page.Load之前添加控件,以便在回发之间保持ViewState,因此请使用OnInit事件处理程序。

    但是一旦添加了事件处理程序,您应该能够在页面加载期间或之后的任何时候绑定事件处理程序(例如OnClick)。。。例如,在网格的ItemDataBound(或类似内容)或Page.PreRender中。

    推荐文章