免責事項:ASP.netページのライフサイクルを読みました。また、動的制御に関するいくつかの 優れた 記事も読みましたが、何かが足りないに違いありません。
背景:私は現在、ユーザーの入力に基づいて多くの動的コンテンツを作成する必要があるWebサイトに取り組んでいます。動的コントロールを永続化し、それらのイベントを正しく接続するには、ポストバックのすべてのページでこれらの動的コントロールを再作成する必要があることを理解しています。
私のプロジェクトの性質上、ユーザーが何を選択したかについての情報がない限り、私のコードは作成するコントロールを認識していません。ユーザーの選択をに保存していますが、まだロードされていないため、ではViewState
使用できません。Page_Init
したがって、ViewStateを読み取るまで待つPage_PreLoad
かPage_Load
、読み取ってから、動的コントロールを再作成する必要があります。
わからない部分:の間にコントロールを再作成しようとすると、コントロールはPage_Load
保持されますが、関連するイベントが発生しないようです。たとえば、作成したIをクリックしても、ボタン自体は保持されますが、イベントLinkButton
に接続したメソッドは起動されません。Click
偶然に発見した奇妙な解決策は、代わりにコントロールを再作成してPage_PreLoad
、イベントが正しく発生するようにすることです。
私の質問(またはむしろ質問):なぜ私の問題は、のPage_PreLoad
代わりに私のコントロールを再作成することによって消えるように見えるのPage_Load
ですか?これは安全な方法ですか?を使用した他のコードを見たことがないのでPage_PreLoad
、注意が必要です。この解決策は私のために働いていますが、私が見逃しているかもしれない落とし穴はありますか?私は無意識のうちに後で失敗する準備をしていますか?
私のコードは、コントロールを作成して静的コントロールLoadDocument()
に詰め込むメソッドです。Panel
protected void Page_PreLoad(object sender, EventArgs e)
{
if (ViewState["xmlfilename"] != null)
{
LoadDocument(ViewState["xmlfilename"].ToString());
}
}