如何通过嵌套的WebUserControls传递值?

时间:2011-12-22 14:30:05

标签: c# .net webusercontrol

我正在尝试将值传递给WebUserControl,然后再传递给第二个嵌套的WebUsercontrol。第一个Control可以毫无问题地获得值,并且在调试模式下,似乎值确实传递给嵌套控件,但在呈现页面之前它会以某种方式丢失。

在示例中,我试图传递“headerTheme” - 值。

嵌入顶级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>

顶级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那也很棒:)

1 个答案:

答案 0 :(得分:0)

我弄清楚是什么导致了这个问题。嵌套WebUserControl中的Page_Load事件被触发两次。将包含WebUserControl的占位符控件添加到母版页上的占位符时,会出现这种情况。

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

添加占位符控件后:head.Controls.Add(Header);

(标题是包含HeaderControl的占位符)

/马格纳