如何通过嵌套的WebUserControls传递值
本文关键字:WebUserControls 何通过 嵌套 | 更新日期: 2023-09-27 18:18:41
我试图传递一个值给一个WebUserControl,然后继续到第二个嵌套的WebUserControl。第一个控件可以毫无问题地获得该值,并且在调试模式下,该值似乎确实传递给嵌套控件,但在渲染页面之前不知何故丢失了。
在这个例子中,我试图传递"headerTheme"-value。
嵌入顶级webusercontrol:
<uuc:FrameWork
runat="server"
ID="FrameWork"
EnableViewState="true"
headerTheme="myValue"
/>
top-level-WebUserControl ascx:
<asp:PlaceHolder ID="Header" runat="server">
<!-- Header control Start -->
<uuc:HeaderControl runat="server" ID="HeaderControl" EnableViewState="true"/>
<!-- Header control End -->
</asp:PlaceHolder>
top-level-WebUserControl后台代码:
public string headerTheme { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
PlaceHolder head = (PlaceHolder)Page.Master.FindControl("HeaderPlaceHolder");
HeaderControl.headerTheme = headerTheme;
head.Controls.Add(Header);
}
嵌套的WebUserControl代码:
public string headerTheme { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
msg.Text = "Value: " + headerTheme;
}
嵌套的WebUserControl ascx:
<asp:Label ID="msg" runat="server"></asp:Label>
嵌套的usercontrol也在占位符中,该占位符被放置在母版页的第二个占位符中。由于在顶级的WebUserControl中实际上有多个嵌套的控件,这是为了将页眉,页脚,菜单等正确地放置在母版页上。
最后的结果是一个空值,并且开始设置的值在过程中的某个地方丢失了。我似乎找不到在哪里或怎么找到的。
如果有人有更好的方法传递值给嵌套的WebUserControls,那将是伟大的太:)
我找到了导致这个问题的原因。嵌套的WebUserControl中的Page_Load事件被触发两次。
将包含WebUserControl的占位符控件添加到母版页的占位符时,会发生这种情况。答案是添加值:HeaderControl。headerTheme = headerTheme;
(Header是包含HeaderControl的占位符)
玛格尼/