2011-12-22 31 views
0

我想將一個值傳遞給WebUserControl,然後再向第二個嵌套的WebUsercontrol傳遞值。第一個Control可以毫無問題地獲得該值,並且在調試模式下,它看起來好像確實將值傳遞給了嵌套控件,但在呈現頁面之前它會以某種方式丟失。如何通過嵌套的WebUserControls傳遞值?

在這個例子中,我試圖傳遞「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這將是巨大的:)

+0

爲什麼不存儲在您的ViewState這個值是提供給所有控件當前請求不分尊卑的? – 2011-12-22 14:39:35

回答

0

我想通了,是什麼原因導致這個問題的一個更好的辦法。嵌套的WebUserControl中的Page_Load事件被激發兩次。這在將包含WebUserControl的佔位符控件添加到主頁上的佔位符時發生。

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

加入佔位符控件後:head.Controls.Add(Header);

(標題是包含HeaderControl的佔位符)

/馬格納