WebブラウザにWebフォームを表示するwinアプリケーションがあります。このWebフォームからデータを取得するために、非表示のテキストボックスを使用し、WebブラウザコントロールのHtmlDocumentオブジェクトを使用してそのテキストを取得しています。他のフォームがこの抽象化を使用できるように、このテキストボックス要素を持つこのWebフォームの抽象化を作成したいと思います。Webコントロールを作成し、その上にテキストボックスを配置しました。このコントロールを自分のページに配置すると、テキストボックスが表示されると思いました。アプリケーションを実行すると、テキストボックスがレンダリングされているのに、コントロール名が付いていることに気付きました。その名前(WebControl $ TextBoxName)とそのid(WebControl_TextBoxName)で、winアプリは、そのid(TextBoxName)で要素を見つけることができなかったため、例外をスローします。だからここに私の質問があります:いくつかの要素を含む抽象的なWebフォーム/Webコントロールを作成し、それを使用して最終的なフォームにこれらの要素を含めるにはどうすればよいですか?(名前とIDは変更しないでください)ご協力いただきありがとうございます
2 に答える
WinFormsでブラウザコントロールを使用したことはありませんが、使用したいのはマスターページだと思います。ブラウザコントロールでレンダリングしているものがASPXページであると想定して、データを取得する非表示のテキストボックスを使用してマスターページを作成し、その共通のコントロールを使用するようにすべてのページに指示します。マスターページ。ページがレンダリングされると、コントロールIDは「ctl00_TextBoxName」になります。一意のIDが必要であり、ASP.NETのすべてのネストされた制御機能で一意性を保証する唯一の方法であるため、IDの連結を回避する方法はありません。ただし、これを行うと、マスターページを継承する新しいフォームを作成するたびに、常に同じ名前のコントロールを使用できるようになります。お役に立てば幸いです。
要約すると(誰が段落を読むのでしょうか?):
- マスターページの作成
- 共通のコントロールをマスターページに配置します
- フォームにマスターページを継承させる
マスターページがどのように機能するかについては、MSDNのドキュメントを参照してください。
dotNet 4.0は静的IDをサポートしているため、静的IDが壊れたり、クライアントIDモードで読み取られたりすることはありません。
または、コントロールのレンダリングをオーバーライドして、任意のIDで標準のhtml非表示フォームフィールドを出力し、asp.netではないという事実を非表示にするテキストボックスを返すカスタムプロパティを追加することもできます。サーバー制御。