3

FormView でモードを切り替えるときに、分離コードからコントロールをどのように見つけますか? 新しく選択されたテンプレートではなく、以前に表示されたテンプレートでコントロールを検索するため、Page_Load イベント中に FindControl を使用できないようです。PageLoad だけに頼ることはできず、OnDataBound などの別のイベント内でコントロールを見つける必要があると思いますが、本当にそうしなければならないのでしょうか? 私は、OnDataBound のようなイベントがないフォームビューを 1 日にいくつか見てきました...

私の特定のケースの詳細: ItemTemplate、InsertItemTemplate、および EditItemTemplate の両方に同じテキスト ボックスが含まれるフォームビューがあります。(すべてのテンプレートで同じ ID を持っています)

Page_Load イベント中に、FindControl を使用してテキスト ボックスを見つけ、その可視性を変更します。フォームビューを最初にロードするときは問題なく動作しますが、何らかの理由で、フォームがモードを変更したりテンプレートを変更したりすると機能しません (ページがレンダリングされた後、テキストボックスの可視性が正しくないことがわかります)。

たとえば、読み取りモードから編集モードに切り替えると、formview.Mode は FormViewMode.Edit に設定されますが、PageLoad イベント中に FindControl を使用すると、EditItemTemplate ではなく ItemTemplate 内のコントロールが検索されます。したがって、すべてのテンプレートに同じ ID を持つコントロールがある場合、間違ったテンプレート内にコントロールが見つかり、ページがロードされた後、ロードされたコントロールが同じプロパティを持たない理由について非常に混乱するでしょう。 pageLoad中にデバッガーで調べたときに思ったとおりです。

4

1 に答える 1