質問: ### 質問 C#/FormsアプリにてUIをHTMLで記述する場合の、一般的な値の埋め込み方を教えてください。 ### 目的 C#でFormsアプリを作成しています。 アプリ内の一部にて複雑な表示が必要となったため、この箇所をHTMLでデザインしたいと考えています。 基本的な思想としては、表示領域に`Forms`の`WebBrowser`を設置し、ここにローカル上のHTMLファイルを読み込ませる。 このとき、HTMLの内部にC#の変数を埋め込むことを考えています。 (あくまでもUIをHTMLで記述したいだけです。Webアプリを作りたいと思っているわけではありません。) ### 問題 UIをHTMLで記述する際、C#ではどのような方法が一般的なのかが分かっていません。 恐らく方法としては、Webのフレームワークなどで使われる `<%= value %>` といったような方法でC#側の変数を埋め込むか、 もしくは(C#からJavaScriptの変数を操作できるようなので)JavaScriptを用いてHTMLに値を埋め込む、または C#コード上からHTMLを読み込みオブジェクト化し、値の埋め込みや書き換えをする のいずれかだと思っています。 実際のところ、どのような方法を用いるのが一般的/用いるべき なのでしょうか。
回答: WebBrowserコントロール内のHTML/JavaScriptにC#から値を渡す場合、次の3つの方法が考えられます。 1. WebBrowser.Document プロパティを通じてHTMLDOMツリーにアクセスし、目的のDOM要素を書き換える。JavaScriptによるDOM操作時と同様に、WebBrowser.Document.GetElementById() で目的のDOM要素を取得し、HTMLElement.innerHtml を書き換える、あるいはWebBrowser.Document.InvokeScript() によりJavaScriptコードを実行、その際functionにパラメーター文字列を与えて呼び出す、といった操作が可能です。 2. WebBrowser.DocumentStream または WebBrowser.DocumentText にHTML全文をテキストとして与える。この場合、C#の変数値等は、HTMLテキストの組み立て処理などで組み込んでやることができます。 3. WebBrowser.ObjectForScript(HTML側からは window.external という特殊オブジェクトで参照できる) を通じてHTML側の要素やJavaScriptとC#コード間で通信し、必要な情報をやりとりする。 参考サイト: WebBrowser クラス(System.Windows.Forms).aspx) HtmlDocument クラス(System.Windows.Forms).aspx) 方法 : DHTML コードとクライアント アプリケーション コード間の双方向の通信を実装する.aspx) ご参考になれば。