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

时间:2009-03-25 16:02:24

标签: c# asp.net postback

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

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

任何人都对可能发生的事情有任何想法?

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

4 个答案:

答案 0 :(得分:1)

如果您正在动态加载用户控件,则必须在每次加载页面时重新加载它(回发与否),以便.net处理器知道在哪里连接提交事件。

答案 1 :(得分:1)

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

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

注册控件:

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

然后按如下方式添加:

<myPrefix:tagName ID="myId" runat="server"/>

答案 2 :(得分:0)

如果你是数据绑定,你需要检查你是否只是这样做!Page.IsPostBack当你进行数据绑定时,你会从回发中消除任何“已保存”的状态。

答案 3 :(得分:0)

听起来你没有在回发上重新创建控件。您需要在Page_Init期间为要加载的视图状态添加控件。