当前位置:  开发笔记 > 后端 > 正文

动态创建的用户控件无法处理PostBack上的事件

如何解决《动态创建的用户控件无法处理PostBack上的事件》经验,为你挑选了2个好方法。

我有一个用户控件,它使用页面初始化中的以下代码动态加载到页面中.

Dim oCtl As Object
oCtl = LoadControl("~/Controls/UserControl1.ascx")

oCtl.Id = "UserControl11"
PlaceHolder1.Controls.Clear()
PlaceHolder1.Controls.Add(oCtl)

用户控件还包含一个按钮,我无法捕获用户控件中的按钮单击.



1> Adrian Clark..:

你正在做的一些事情都是不需要的,可能会导致你的问题.

这些是:

    无需将控制对象存储在会话中.Control本身应该使用ViewState和Session State来存储所需的信息,而不是整个实例.

    创建控件时,不应检查PostBack.每次都必须创建它以允许ViewState工作并且要连接事件.

    加载ViewState后加载的控件通常无法正常运行,因此请尽可能避免在Page Load事件期间加载.

这段代码适合我:


Default.aspx的

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="Test_User_Control._Default" %>




    

Default.aspx.vb

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

        Dim control As Control = LoadControl("~/UserControl1.ascx")
        PlaceHolder1.Controls.Add(control)

    End Sub
End Class

UserControl1.ascx

<%@ Control Language="vb" AutoEventWireup="false" CodeBehind="UserControl1.ascx.vb" Inherits="Test_User_Control.UserControl1" %>



UserControl1.ascx.vb

Public Partial Class UserControl1
    Inherits System.Web.UI.UserControl

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = "The button has been pressed!"
    End Sub

End Class



2> 小智..:

在.NET进入页面生命周期的"回发事件处理"步骤之前,您必须确保控件存在于页面上.由于控件是动态添加的,因此您必须确保在每个帖子上重新创建该控件,以便它可以找到触发事件的控件.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有