2009-04-07 12 views
3

ページのライフサイクル中に動的に読み込まれるUserControlsのIDプロパティに問題があります。 具体的には、システムがPage.Form.RenderControl(htmlTextWriter)を呼び出すと、IDプロパティが変更されます。 コントロールが呼び出される前に、コントロールはID「ctl84」を持ちますが、呼び出し後にID「ctl99」を持ちます。ASP.NETダイナミックUserControl ID生成の問題

htmlTextWriterの出力には元のIDが含まれていますが、VS 2008デバッガのコントロールのIDプロパティを調べると、変更されていることがわかります。

アプリケーションは、.NET 2.0を使用して1.1から変換されたMCMS 2002(Microsoft CMS 2002)フレームワーク内で実行されており、xhtmlConformance = "Legacy"は有効になっていません。

ページのライフサイクル全体を通じてIDが一定である必要があります。

編集:IDプロパティを手動で設定することは選択できません。

答えて

1

コードからコントロールにIDを明示的に割り当てていますか?

IDが同じ場合は、同じIDを使用してください。

なぜそれが変わっているのかわかりません - 私の推測は... と同じのコントロールではありません。可能性は、何らかの理由で生成ルーチンが2回実行されているか、またはそのようなsmtが実行されているかを制御することです。

コントロールが大量に生成され、2回ヒットするかどうかを確認するブレークポイントを設定します。もしそうなら、それは問題です。

+0

私は意図的にIDを割り当てるためにASP.NETに任せています。 – jamaicahest

+0

あなたはそれをやっている理由は何ですか?コントロールが成熟した場所にブレークポイントを設定して、2回ヒットしたかどうかを確認する - もしそうなら問題は – JohnIdol

+0

これはMCMSシステムからロードされているためです。それをレンダリングする方法をシステムに把握させる。 – jamaicahest

0

コントロールの同じインスタンスであることを確認するには、コントロールのGetHashCode()メソッドをチェックします。

+0

GetHashCode()はPage.Form.RenderControl()の前後に同じ番号を返します。 – jamaicahest

0

asp.netコントロールを含めると、実行時に生成されたIDが変更されます。生成された正確なクライアントIDを予測することはできません。あなたができることは、ユーザーコントロールによって提供されるClienIDプロパティを使用することです。

ボタンbtnSave =新しいボタン();

btnSave.ID = "btnSave";

string clientID = btnSave.ClientID;

cientIDをチェックすると、 "ctl88_99 _ *** _ btnSave"のようになります。

+0

ClientIDも同様に変更されますが、ページライフサイクルでIDが変更されるという問題があります。ポストバックやページの再読み込みではありません。 – jamaicahest

+0

ポストバックはページライフサイクルの一部です – JohnIdol

+0

私はクライアントIDの変更に同意します。クライアントIDを使用することは、ハードコードされたクライアントIDよりも操作を実行するためにこれを使用することです。私はあなたがクライアント側からコントロールにアクセスしようとしていると思います。この場合は、ページの最後に隠れ変数を使用し、aspコントロールのclientidに値を設定します。 – rAm

0

はい、私は、私がコントロールに任意のIDを割り当てていないです私の以前の経験に...ラムが正しいと思う..私は、明示的なid値は、すべての時間を働くことに気づいたと同じをお勧めします。..アンディ

関連する問題