0

我正在尝试将值传递给 WebUserControl,然后再传递给第二个嵌套的 WebUsercontrol。第一个控件可以毫无问题地获取该值,并且在调试模式下,该值似乎确实也传递给了嵌套控件,但它在呈现页面之前不知何故丢失了。

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

嵌入顶级WebUserControl:

<uuc:FrameWork 
        runat="server" 
        ID="FrameWork" 
        EnableViewState="true"
        headerTheme="myValue"
         />

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

此外,嵌套的用户控件位于占位符内,该占位符被放置在母版页上的第二个占位符中。由于在顶层WebUserControl中实际上有多个嵌套控件,这是为了在母版页上正确放置页眉、页脚、菜单等。

结果最终是一个空值,并且在开始时设置的值会在途中丢失。我似乎无法找出在哪里或如何。

如果有人有更好的方法将值传递给嵌套的 WebUserControls,那也很棒:)

4

1 回答 1

0

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

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

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

(Header 是一个包含 HeaderControl 的占位符)

/马格纳

于 2011-12-29T12:52:05.777 回答