- - PR -
PostBackが無効化される
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-04 18:22
いつも拝見させて頂いてます。
現在asp.net(vb)で開発をしているのですが、 InputタグのFileフィールドから、ファイル名を取得しようと思っています。 以下のようなJavascriptでファイル名をTextBoxに設定するまでは出来たのですが、 その後他のボタンをクリックしてもPostBackが発生しません。 function fncSelectFile() { document.forms['Form1'].elements['File1'].click(); //非表示にしたFileフィールドをクリック document.forms['Form1'].elements['TextBox1'].value = document.forms['Form1'].elements['File1'].value; //FileフィールドのValueをTextBox(ReadOnly)にセット } 上記のJavascriptを処理後にボタンAをクリックするとAのイベントは実行されず、 その後でボタンBをクリックするとBのイベントは実行されます。 先にボタンBをクリックするとBのイベントは実行されず、 ボタンAのイベントは実行されます。 通常通りにポストバックを発生させるにはどうしたら良いのか分かりません。 どなたかご存知の方がいらっしゃいましたらご教授願います。 | ||||||||
|
投稿日時: 2006-09-04 19:52
<input type="file" />にname属性があるとそうなるようです。
ポストバックするボタンを押したタイミングでなぜか<input type="file" />の中身も消えています。 そもそもなんでこんな手の込んだことしてるんですか?フルパスを渡したいんですか? ブラウザはセキュリティのため<input type="file" />ファイル名のフルパスを渡さないように なってきています。使われ方にもよりますがフルパスがサーバー渡るような実装はよくないと思いますよ。 | ||||||||
|
投稿日時: 2006-09-04 20:18
返答ありがとうございます。
Visible=falseではなく、スタイルでDISPLAY=noneを指定しています。 このような方法を取っているのは、ファイルをアップロードせずにファイル名 のみ取得する為です。 通常のFileフィールドだとサーバーにファイルがアップロードされてしまう為、 サイズの大きいファイルを指定するとタイムアウトしてしまいます。 name属性を切ってJSを以下のように変更してもやはりダメでした・・・ function fncSelectFile() { var objInput = document.getElementsByTagName('INPUT'); var objRegex = new RegExp("File1"); for(i=0; i < objInput.length; i++){ if(objInput[i].id.match(objRegex)){ objInput[i].click(); document.forms['Form1'].elements['TextBox1'].value = objInput[i].value; } } } | ||||||||
|
投稿日時: 2006-09-04 22:08
できたけどなぁ?→ http://blogs.wankuma.com/jitta/archive/2006/03/08/21735.aspx
同じ。。。 | ||||||||
|
投稿日時: 2006-09-04 23:19
あ、IE6はフルパス渡しなんでしたね。Firefox 1.5.0.6はファイル名だけ渡しですね。
runat="server" の書かれていないHtmlコントロールじゃないとだめかもですね。 勝手にname属性が書かれてしまうようですから。ちなみにFireFoxではこのコード動かないんですね。。 | ||||||||
|
投稿日時: 2006-09-04 23:47
お世話になっております。がんふぃーるどです。
かなりうる覚えなのですが、inputタグのfile型はかなり制約が多かった気がします。 そのうちの一つに、javascriptからfile型のclickメソッドを呼ばれた場合 submitしようとしても、最初だけ(最初のクリック)submitされず、2回目以降しか submitが働かなかった気がします。しかもfile型のinputタグの値も初期化されてた 気がします。 要するに、javascriptの中からfileuploadのclickメソッドを呼んでいるのが 問題だと思います。 IEだけの問題だったと思うので、IE以外のブラウザでどうなるか試してみると いいかもしれません。
formのenctypeをapplication/x-www-form-urlencodedにしてしまうとか… multipart/form-dataでないと複数のデータを送信できないはずですが、 あまり汎用的じゃないからダメかな(技巧に懲りすぎ?)。
今までフルパスを使用してたWebアプリ(社内アプリとか)困りそうですね… [ メッセージ編集済み 編集者: がんふぃーるど 編集日時 2006-09-04 23:48 ] | ||||||||
|
投稿日時: 2006-09-05 11:01
ありがとうございます!
runat="server"を取ったら動きました! でもIE7からはフルパスが取れなくなりますね・・・ もうちょっとがんばってみます。 みなさんありがとうございました。 |
1