如何通过嵌套的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,那将是伟大的太:)

如何通过嵌套的WebUserControls传递值

我找到了导致这个问题的原因。嵌套的WebUserControl中的Page_Load事件被触发两次。

将包含WebUserControl的占位符控件添加到母版页的占位符时,会发生这种情况。

答案是添加值:HeaderControl。headerTheme = headerTheme;

(Header是包含HeaderControl的占位符)

玛格尼/