2011-09-12 29 views
8

関連質問:質問でGet All Web Controls of a Specific Type on a PagePageRoadでPreRenderを使用するタイミングは?

私はすべてのコントロールを得ることができますどのように尋ねた上で、魔法のように動作しますが、何かがちょうどので、私はそれは私かもしれないと思った、非常にフィットしません。私は次のコードを持っていますが、ページ上のコントロールを操作していませんが、私の理論ではうまくいくはずです。あなたは、そのちょうど私の操作、すべてのコントロールを取得する方法を示し、関連する質問から入手できるコード、GetControlList()コードザッツ

List<DropDownList> allControls = new List<DropDownList>(); 
ControlEnhancer.GetControlList<DropDownList>(Page.Controls, allControls); 

foreach (DropDownList childControl in allControls) 
     { 
      foreach (ListItem li in childControl.Items) 
      { 
       li.Attributes.Add("title", li.Text); 
      } 

      childControl.Attributes.Add("onmouseover", "this.title=this.options[this.selectedIndex].title"); 
     } 

。私はすべてのドロップダウンリストlistitemを取得しようとしているので、私はツールチップを持つことができるようにタイトルを追加しています。

IE8以降では、ドロップダウンボックスの長いテキストを短く修正しています。

+0

元の質問はコントロールのリストを取得します。私はドロップダウンリストコントロールを取得し、テキスト属性を追加して上記のように操作する必要があります。 – Anicho

+0

更新:問題はコードではなく、より多くの場所、それは私が問題を別のページにポストバックを強制するまで実行されていないようだとすぐに回答を投稿します。 – Anicho

+0

プレレンダリングイベントで実行するために必要なページロードで実行していた。 – Anicho

答えて

8

Page_Loadが早すぎます。 Page_PreRenderは、ブラウザのページのHTMLが実際にレンダリングされる前の最後の瞬間であり、多くの場合、ユーザーコントロールの属性を設定するのに最適な場所です。時々削除/置き換え/上書き

このWebフォーム(ページ)のライフサイクル中にページの他のイベントがあるので(とページに含まれるユーザーコントロールでは...)本当に)それらの属性をブラウザに表示する唯一の方法は、他のライフサイクルイベントが発生して処理された後に追加することです。Page_PreRender.

+2

良い答え誰もが読むことをお勧めします:http://msdn.microsoft.com/en-us/library/ms178472.aspx asp.netページのライフサイクルをよりよく理解する。 – Anicho

+3

"Page_PreRenderは、ページのHTMLが実際にレンダリングされる前の最後の瞬間です。" - 本当ではなく、後のイベント 'PreRenderComplete'と' SaveStateComplete'があります。私の答えを見てください。 – Joe

8

実際にはPreRenderでも早すぎることがあります。 DataSourceIDを使用するコントロールのデータバインディング中にDropDownListコントロールをコントロールツリーに追加することができます。

  • PreRenderComplete

    より適切であるかもしれない、さらに2つのイベントがあります。この時点で、すべてのコントロールが作成され、ページはレンダリングの準備が整います。

  • SaveStateComplete。ビューステートとコントロールステートが保存された後に発生します。ここで行った変更は、ビューの状態に保持されません。あなたの例では

(クライアント側の属性を追加する)、私は不必要なビューステートの肥大化を避けるためにSaveStateCompleteイベントを使用すると思います。

+0

積極的に答えを改善してくれてありがとう。ありがとう。 – Anicho

関連する問題