1

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

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

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

编辑:我对此进行了测试,并将 SharePoint 排除在外;我能够重现它,因此我删除了对 SharePoint 的所有引用。

4

4 回答 4

1

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

于 2009-03-25T16:34:00.670 回答
1

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

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

像这样注册控件:

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

然后按如下方式添加:

<myPrefix:tagName ID="myId" runat="server"/>
于 2009-03-25T17:40:46.907 回答
0

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

于 2009-03-25T16:11:30.023 回答
0

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

于 2009-03-25T16:33:00.593 回答