- PR -

[ASP.NET]プログラムからcodebase要素の値を設定する

投稿者投稿内容
新人S
ベテラン
会議室デビュー日: 2005/10/12
投稿数: 74
投稿日時: 2006-10-16 15:19
いつもお世話になってますm(_ _)m
[ASP.NET (言語:VB.NET)]

ある市販のコントロールを使用しています。
そのコントロールのcodebaseの値をプログラム上から設定したいと考えています。
ちなみにそれはASP用に開発されたもので、ASP.NETでも使用できるのですが、.NET用に開発されたツールのように、プロパティに対してプログラムからアクセスすることができないようです。

HTMLのタグにrunat="server"を書き込んでみましたが、
『GUID には、ハイフンを 4 つ含む 32 桁の数字 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) を含んでいなければなりません。』
という解析エラーになってしまい、埋め込むことができません。
なので、

imgCtrl.Attributes["CodeBase"]="http:/testApp/ocx.test.cab#version=0,0,0,1"

↑このようなかんじでアクセスしようと思いましたが無理でした。

上記以外の方法でプログラム上からcodebase要素にアクセスする方法を、どなたかご存知ないでしょうか?
よろしくお願いします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-16 18:43
引用:
HTMLのタグにrunat="server"を書き込んでみましたが

まず、どんなタグですか?objectかなんか?
新人S
ベテラン
会議室デビュー日: 2005/10/12
投稿数: 74
投稿日時: 2006-10-16 19:01
べるさん返信ありがとうございますm(_ _)m

べるさんのおっしゃる通り、OBJECTです。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-16 19:45
引用:
『GUID には、ハイフンを 4 つ含む 32 桁の数字 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) を含んでいなければなりません。』
という解析エラーになってしまい

といわれてもタグをどう書いているかわからないのでなんともいえません。
書いている<object>タグの中身を教えてください。

引用:
imgCtrl.Attributes["CodeBase"]"http:/testApp/ocx.test.cab#version=0,0,0,1"

これはVBのソースですよね。imgCtrlの型は何であることを期待しましたか?

引用:
ある市販のコントロールを使用しています。
そのコントロールのcodebaseの値をプログラム上から設定したいと考えています。
ちなみにそれはASP用に開発されたもので、ASP.NETでも使用できるのですが、.NET用に開発されたツールのように、プロパティに対してプログラムからアクセスすることができないようです。

これはサーバーで呼び出されすものですか?それともクライアントで呼び出されるもの?
というかどの製品ですか?

[追記]
サーバー側で解釈されてほしいならここを参照ください。
http://msdn2.microsoft.com/ja-JP/library/h8k45y06.aspx

runat="server"をつけるとサーバー側オブジェクトとし解釈されてしまうんでしょうね。
クライアントにHTMLとして出力されてほしい(しかも値を動的に変える)なら。。
Literalでも置いてタグごと出力、とかでしょうかね。

[ メッセージ編集済み 編集者: べる 編集日時 2006-10-16 22:45 ]
新人S
ベテラン
会議室デビュー日: 2005/10/12
投稿数: 74
投稿日時: 2006-10-17 14:09
べるさん、度々ありがとうございます(>_<)
私の説明不足でした、すみませんm(_ _)m

><object>タグの中身を教えてください。

<OBJECT id="imgCtrl" style="Z-INDEX: 103; LEFT: 264px; WIDTH: 720px; POSITION: absolute; TOP: 128px; HEIGHT: 530px" codeBase="http://test/testApp/ImageKit7D.cab#version=1,0,0,11" height="530" width="720" data="data:application/x-oleobject;base64,3nj0dzbrNkavfxgX3MgXfAADAABqSgAAxzYAAAMAAQAAAAsAAAATAP///wATAAAAAAALAAEACwABAAkAAAAAAAAAAAAAAAAAAAAAAAMACgAAAAMACgAAAAsAAAADAAEAAAADAAEAAAATAMDAwAALAAEACwAAAAMAAQAAAAMAAAAAABMAwMDAAAUAAAAAAAAAJEADAAAAAAATAAAAAAATAP///wADAAAAAAALAAAACwAAAAsAAAA=" classid="clsid:77F478DE-EB36-4636-AF7F-1817DCC8177C" VIEWASTEXT>

aspxファイルは上記のようなかんじになっています。

>>imgCtrl.Attributes["CodeBase"]"http:/testApp/ocx.test.cab#version=0,0,0,1"

>これはVBのソースですよね。imgCtrlの型は何であることを期待しましたか?

System.Web.UI.HtmlControls.HtmlGenericControlを考えていました。


>これはサーバーで呼び出されすものですか?それともクライアントで呼び出されるもの? というかどの製品ですか?

製品は、NEWTON社の『ImageKit7 ActiveX』です。
サーバー側で呼び出すのかクライアント側で呼びだすのか?という質問に答えられているかどうかわかりませんが、
目指す動きとしては、上記のHTMLがまずaspxファイルに書かれています。
そして、ページロード(サーバー側のロード)の際に、WebConfigに書かれているcodebaseの値を取得し、ページロード時にcodebaseの値を設定したいと考えています。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-17 16:25
引用:
System.Web.UI.HtmlControls.HtmlGenericControlを考えていました。

上にも書きましたがobjectタグにrunat="server"を書くと↓こちらの意味になってしまうのでしょうね。
http://msdn2.microsoft.com/ja-jp/library/h8k45y06.aspx

引用:
製品は、NEWTON社の『ImageKit7 ActiveX』です。
サーバー側で呼び出すのかクライアント側で呼びだすのか?という質問に答えられているかどうかわかりませんが、
目指す動きとしては、上記のHTMLがまずaspxファイルに書かれています。
そして、ページロード(サーバー側のロード)の際に、WebConfigに書かれているcodebaseの値を取得し、ページロード時にcodebaseの値を設定したいと考えています。

クライアント側でもサーバー側でも使えるもののようですね。
runat="server"を書かずにcodebaseを固定値でテストした場合、期待した動作をしますか?
ブラウザで表示したときにobjectタグは書かれていてほしいのですよね?(つまりクライアント側で動作)
だとするとやはり上にも書いたようにLiteralでも置いといてobjectタグごとTextプロパティに
セットするんでしょうかね。独自コントロール作ってもいいですが私ならそこまではしません。
新人S
ベテラン
会議室デビュー日: 2005/10/12
投稿数: 74
投稿日時: 2006-10-17 17:48
べるさん返信ありがとうございますm(_ _)m

最初、アドバイスしてくださっている意味がわからなかったのですが、Literalコントロールを調べてみてようやくなんとか理解しました(>_<;

早速アドバイスしていただいたかんじでやってみました。
方法としては、Literalコントロールをデザイナ画面で貼り付けて、そのコントロールのTextプロパティに"<OBJECT〜</OBJECT>"を丸ごと入れる、といったかんじです。

しかし、VBScriptのWindow_onLoad()メソッド内でimagekitに対してアクセスしているところがあるのですが、そこで
『実行時エラー:オブジェクトがありません。:'imagekit'』
と、なってしまいます。
Literalコントロールがobjectタグを書き出すよりもVBScriptが走るのが早いのでしょうか。。

ちなみに

>クライアント側でもサーバー側でも使えるもののようですね。
>runat="server"を書かずにcodebaseを固定値でテストした場合、期待した動作をしますか?

今は、aspxファイルのHTMLコードに直接codebaseを書いています。
ちゃんと指定したフォルダを見に行ってダウンロードしているので、動きとしては問題ありません。
ただ、これだとサーバー名など固定になってしまうので、できればWebconfigとかで簡単に変更できたら良いなぁと思って今回のような質問をした次第ですm(_ _)m

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-17 18:24
引用:
VBScriptのWindow_onLoad()メソッド内でimagekitに対してアクセスしているところがあるのですが、そこで
『実行時エラー:オブジェクトがありません。:'imagekit'』
と、なってしまいます。
Literalコントロールがobjectタグを書き出すよりもVBScriptが走るのが早いのでしょうか。。

VB.NETでなく「VBScript」ですよね。クライアントのスクリプトですよね。
でしたら、Literalがobjectタグを書き出すよりもVBScriptが先、ということはないです。

直接codebaseを書いている場合はうまくいっているということなので、その場合と
うまくいかない場合のHTMLソースを比較してみたらいかがですか?

引用:
方法としては、Literalコントロールをデザイナ画面で貼り付けて、そのコントロールのTextプロパティに"<OBJECT〜</OBJECT>"を丸ごと入れる、といったかんじです。

VB.NETコード内で
Literal.Text = "<object codebase=" + (動的に取得した値) + " 〜</object>"
のようなつもりで言ったのですが通じていたでしょうか。

スキルアップ/キャリアアップ(JOB@IT)