我有一个加载用户控件的自定义控件(编译为DLL)。 (即,自定义控件执行LoadControl)在用户控件中是一个按钮和一个文本框。我点按了按钮的点击事件。
我在文本框中输入一个值。当我单击按钮时,页面会进行回发。我的用户控件知道因为Page.IsPostBack = true而发生了回发。但是,按钮的click事件永远不会被触发,我的文本框也丢失了我输入的值。
任何人都对可能发生的事情有任何想法?
编辑: 我对此进行了测试,并将SharePoint从图片中删除;我能够重现它,所以我删除了对SharePoint的所有引用。
答案 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期间为要加载的视图状态添加控件。