ASPとそのライフサイクルで繰り返し問題が発生します。これは、Page_Loadイベントが発生する前にイベントをキャッチすることです。たとえば、ここでは、gridViewクラスから継承するgridviewをカスタマイズしています。ジャンプするページを選択するためのドロップダウンリストを追加します(PageIndexChanged)。このドロップダウンリストのSelectedIndexChangedイベントがレンダリング後に呼び出されることを除いて、すべてが素晴らしいでしょう(グリッドとドロップダウンはポストバックごとに再生成されます)。そのため、適切な値を選択できません。
したがって、私のイベントは2回目のポストバックでのみ発生し、常に1回のポストバックで遅れます。
そのドロップダウンはRowCreatedイベントに追加されます。私は他のイベントで試しましたが、遅すぎるか早すぎるか(遅すぎるとレンダリングされない、早すぎると要素が欠落する)。
解決策はありますか?
PS:私は私を助けることができるこの記事を見つけました、しかし私はそれをする方法がわかりません:
制御または継承/拡張を行う際に考慮すべきポイント:
- base.CreateChildControls()を呼び出すCreateChildControlsをオーバーライドして、イベントを発生させるアイテムを作成してから、必要な操作を行う必要があります(つまり、場合によっては行を追加します)。
- リストアイテムDataBindingは、提示する方法が非常に...コーシャではありません.... DataBind()をオーバーライドして子をクリアし、EnsureChildControls()を呼び出してから、新しい行を追加することで、単純化する必要があります...このようにうまくViewStated、永続化、およびイベント管理。はるかに簡単です。
- アイテムをもう一度リストします。子を早めに作成しないでください。OnInitまたはonLoadで子コントロールを直接作成しないでください。それは間違い。最善の方法は、必要なときにシステムにEnsureChildControlsを呼び出させることです(最初のページの読み込み時にPreRenderで、子のイベントがある場合はPostBackで、OnInitの直後に呼び出します)...さらに悪いことに、OnInit、OnLoad EnsureChildControls()を呼び出します。