2011-12-22 10 views
0

WebUserControlに値を渡そうとしていて、次に2番目のネストされたWebUsercontrolに値を渡そうとしています。最初のコントロールは問題なく値を取得することができ、デバッグモードでは値が実際にネストされたコントロールにも渡されるようですが、ページをレンダリングする前に何らかの形で失われてしまいます。入れ子になった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> 

また、ネストされたユーザーコントロールは、マスターページ上の第2のプレースホルダに入れますプレースホルダの内側です。実際には、トップレベルのWebUserControlには複数のネストされたコントロールが存在するため、ヘッダー、フッター、メニューなどをマスターページに正しく配置することです。

結果は最後にヌル値となり、最初に設定された値は途中で失われます。私はどこでどのように見つけることができない。

誰があまりにも素晴らしいだろう、ネストされたWebUserControls :)

+0

なぜかかわらず、階層の現在の要求のすべてのコントロールに利用できる、あなたのViewStateにこの値を格納しませんか? –

答えて

0

私が問題を引き起こしていたものを考え出しに値を伝承するより良い方法を持っている場合。ネストされたWebUserControlのPage_Loadイベントが2回発生しました。これは、WebUserControlを含むプレースホルダコントロールをMasterpageのプレースホルダに追加するときに発生しました。

答えは値を追加することでした:HeaderControl.headerTheme = headerTheme;

プレースホルダコントロールを追加した後:head.Controls.Add(Header);

(ヘッダーHeaderControlが含まれているプレースホルダです)

/マグネ

関連する問題