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

自定义控件加载用户控件;不触发回发事件

  •  1
  • bugfixr  · 技术社区  · 16 年前

    我有一个自定义控件(编译为dll),它加载一个用户控件。(即,自定义控件执行LoadControl)在用户控件中是一个按钮和一个文本框。我接通按钮的点击事件。

    我在文本框中键入一个值。当我单击按钮时,页面会进行回发。我的用户控件知道发生了回发,因为page.ispostback=true。但是,按钮的Click事件永远不会被激发,我的文本框也会丢失我输入的值。

    有人对可能发生的事情有什么想法吗?

    编辑: 我对此进行了测试,并将SharePoint从图片中删除;我能够复制它,因此删除了对SharePoint的所有引用。

    4 回复  |  直到 16 年前
        1
  •  1
  •   ChrisLively    16 年前

    如果动态加载用户控件,则必须在每次页面加载(回发或不回发)时重新加载它,以便.NET处理器知道在何处连接提交事件。

        2
  •  1
  •   Daniel    16 年前

    加载用户控件的一种方法是重写CreateChildControl,调用base.CreateChildControls,然后调用LoadControl方法。如果需要将UserControl放置在特定位置,请在页面上放置一个占位符,然后将控件添加到占位符控件集合中。

    您也可以直接将用户控件添加到标记中。

    将控件注册为:

    <%@ Register Src="~/path/ControlName.ascx" TagName="tagName" TagPrefix="myPrefix" %>
    

    然后按如下方式添加:

    <myPrefix:tagName ID="myId" runat="server"/>
    
        3
  •  0
  •   Muad'Dib    16 年前

    如果您正在进行数据绑定,则需要检查您是否只在进行数据绑定!page.isPostback当您进行数据绑定时,您将从回发中清除所有“已保存”状态。

        4
  •  0
  •   Adam    16 年前

    听起来您没有在回发时重新创建控件。您需要在页面初始化期间添加控件,以便加载视图状态。