euvicc’s sphere pt.3 (migrated)

はてなダイアリー時代に書いてた古い古い日記です💦 更新はしません。

ここ数日勉強中

さて先日『10日でおぼえるASP.NET 2.0 入門教室 (10日でおぼえるシリーズ)』と『Microsoft Visual Studio 2005によるWebアプリケーション構築技法 (マイクロソフトコンサルティングサービステクニカルリファレンスシリーズ)』を購入し、久々にキチンと(?)勉強を始めている。例のごとく業務にはあまり関係がないww
ちなみに前者は手っ取り早く「動くコード」を覚えるために開発環境の手元に置き、後者は半分読み物/半分教科書としてリビングに。手が空いたときにちょくちょく読み進めるようにしている。・・・にしてもなかなかおもろいなこの本は。巷で「赤間」ともてはやされるだけのことはある。
ちなみに、進度は非常にゆっくりだ。片手間だからな。まーそれでもサーバにファイルをアップロードするサンプルコードの勉強は終えた。いやはや楽になったもんだね。FileUploadコントロールを使うと、ファイルのパスを入力するTextBoxのみならず、お決まりの「参照」ボタンまで用意してくれるってなもんだ。スゲーよw ちなみにmozilla Firefox 1.5およびOpera 9.xでも毎回テストしてみている。Mac環境がないのでSafariじゃ試せないが、それ以前にFramework2.0が入ってなきゃどうせ動くまい。ついでに少しおまけして、アップロードしたファイルのMIMEタイプが画像である場合、下に配置したPictureコントロールに表示させるよう変更し、見事に成功! ・・・・・・あれ? ファイル名が日本語だったり、スペースを含んでたり、ていうか長いファイル名でも失敗するじゃねーかコノヤロー。やはりエンコーディングの問題か? まあいい、次いこ、次ww
と、ふとここで考えた。

Excelからのコピー&ペーストって、できんものかな〜?」

おお、すごいぞオレ。珍しく仕事のことを考えたじゃないかw せっかくだからやってみよう。VB2005にはMyというトンでもないクラスが実装されてるそうで、ローカルリソースへのアクセスが凄まじく楽になったそうな。この場合なら、My.Computer.Clipboardって書くだけでクリップボードにアクセスできるらしいぞ!? 使わない手はないよな♪



ここで「ん??」と思った諸兄、その通りですw
ASP.NETはサーバ上で動かすWebアプリなわけで、ローカルリソースってのは即ちサーバ上のローカルリソースというわけだ。そんなもん、クライアント側のブラウザからアクセスできるはずねーだろうが、と。
ええ、ものの見事に大失敗ですよ(苦笑) ていうかそれ以前の問題で、My.Computer.Clipboardが使えないorz MSDNドキュメントをよくよく見てみたら、当のクラスはSystem.Windows.Forms名前空間の下じゃないですか( ゚д゚;)ポカーン はぁ〜・・・馬ッ鹿じゃねーの!?>オレ
四苦八苦しているうち、さすがにオレもこの馬鹿馬鹿しい間違いに気づく。呆れ返って、煙草を一服、頭を冷やすことにした( ゚Д゚)y−~~フゥー

:
:
:
結論として、Myクラスは使えない。当たり前の話だ。じゃあどうするのか??

Ans.『従来通りクライアントサイドでJavaScriptを使う』

芸が無いなぁorz まあでも仕方がない。とりあえずscriptタグをページに加え、簡単な関数を1本作って、asp:Buttonタグも普通のinputに変更。しかし、そうするとコード側に情報を送れないではないか。なので、type="hidden"のinputを一つ用意して、取得したテキストデータはそこに記憶させる。Form.submit()が走れば、コード側からRequest.Form()で値を受け取れるだろうって目論見だったんだが。さて、この試みは成功するでしょうか・・・・・・??




失敗orz
値が受け取れんジャマイカ!! それどころかRequest.Form("hiddenオブジェクトの名前")にしても見つからないときたもんだ。ローカルウィンドウで実行中の変数(プロパティ)をしらみつぶしに探すが、どこにも見当たらない(泣き やっぱりだめか? だめなのか??

:
:
:
2時間ぐらい、あ〜でもないこーでもないと試行錯誤するうち、ふと頭の中にポッと浮かび上がった一つのフレーズ。迷わず入力してみた。

<input type="hidden" id="clipText" value="" runat="server" />

そう、runat="server"、これです。保存してF5*1、そしてExcelで適当なデータをコピーし、ブラウザ内の「貼り付け」ボタンをクリック・・・・・・動いた!
下に配置したasp:Literalコントロールに、どばーっと取り込んだテキストデータが出てきましたヽ(´ー`)ノマンセー あとは、パースして配列に押し込めるなりなんなり好きにできるではないか。

ということで、オレ様の試みは見事に大成功なのであった・・・ていうかこれしきのことでエラい時間食って、しかも大喜びしてるオレワロスwwwww orz

*1:ビルドして実行