私はページのIEで私のボタンを見つけるために、OnLoadイベントににFindControlを持っている:私のaspxページのFindControlはバインドサーバータグでは機能しません。なぜですか?
protected override void OnLoad(EventArgs e)
{
DataBind();
control button = Page.FindControl("myButton");
}
私が合格したときに、私が唯一、すべての作品、これを持っている場合、私は
<asp:Button runat="server" ID="myButton" />
を持っていますOnLoad、ボタンはnullではなく、私は欲しいものを実行することができます。問題は、自分のaspxに動的テキストを追加するときです。
<asp:Button runat="server" ID="myButton" Text='<%# "Here is my dynamic text pulled from a XML" %>' />
次にFindControlは何も見つからず、ボタンがnullです。
バインディングサーバータグをaspxに追加することは、何かを遅らせることを想定していませんか? Pageオブジェクトを調べると、Controlsコレクションにいくつかのコントロールがありますが、myButtonを見つけることができません。
私は何を間違えているのですか?
EDIT
人々は私のコード例では、私の実際のコードであることを考えているようだが、それはないが、だから私は、私はネストされたコントロールを持っているために必要と私はそれを直接アクセスすることはできませんので、私はにFindControlを使用します私は入れているダイナミックテキストが他のページのaspxでオーバーライドできるContentTemplateの内部にあるので、私はバインディングを使用します。
私が質問した質問は、新しく実装されたビヘイビアであるビヘイビアを実装しているため、FindControlがnullを返す問題を追跡したという事実に、より具体的でした。
コード例を改善することは、私のaspxページに<%#%>タグを置くと、OnLoadイベントのFindControlがnullを返すという事実に対する解答または説明ではありません。
EDIT 2
だけではバインドタグは、それらを埋めるために)犯人が、DataBindを(ではないようです。バインドタグを持っているかどうかにかかわらず、FindControlの前にDataBind()を置くとmyButtonがnullになります。コード例の修正が行われました。
これは正しく、Pre-Renderのコードを動かすと、DataBindを呼び出す前にmyButtonが見つからないため、テンプレートDataSourceにデータが設定されていないことを意味します。 DataBindを呼び出さないと、コントロールはviewstateからリロードされ、そのためにnullではありません。私のFindControlの前に私のテンプレートのDataSourceを再適用するか、Pre-Renderの後のFind-Controlを動かして問題を解決してください。コード18の問題に似ていましたが、それが何であったかは分かりませんでした。どうも –