C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ASP.NET C# でのFileUpLoadについての質問


(過去ログ 72 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■41906 / inTopicNo.1)  ASP.NET C# でのFileUpLoadについての質問
  
□投稿者/ 日本人 (1回)-(2009/10/03(Sat) 00:13:50)

分類:[ASP.NET (C#)] 

こんにちは、タイトルでの質問なのですが、
<asp:FileUpload>をstyle="display:none"で非表示にして、代わりに<asp:Button>を使ってファイル読み込みのダイアログボックスを出し、指定ファイルのパスをアラート等で、だしたいのですが、
FireFoxとsafariでダイアログボックスがでません。IE8はでました。

お手数ですが、どうすればよいか教えてください。

<ソース>
******************************************************************************************************************
<%@Page Language="C#" %>

~~~

<script type="text/javascript">
function btn_Click()
{
    document.getElementById("<%= FileUpload1.ClientID %>").click();

    alert("PASSは「" + document.getElementById("<%= FileUpload1.ClientID %>").value + "」です。");
}
</script>

<html>
<head id="Head1" runat="server">
    <title>FileUpload Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload id="FilrUpload1" runat="server" style="display:none" >
        <br/>
        <br/>
        <asp:Button runat="server" ID="Button_Insert" OnClientClick="byn_Click()" Text="UPLOAD" />
        <ht/>
    </div>
    </form>
</body>
</html>
******************************************************************************************************************

内部のほうはデフォルトのままです。

環境は
visualstudio2008
ASP.NET3.0
です。

対応ブラウザは
IE6.0
IE8.0
FireFox(バージョンはとくに指定は無いのですが、出来れば最新のものも対応)
safari(FireFoxと同様)
です。

なお、補足として、
それぞれのブラウザでFileUploadを使用すると、
入力のできない(PASS表示用の)TextBoxが作られ、レイアウトが変わるのがいやなのでButtonで対応しています。

あと、出来ればブラウザ側で動作できるようにしたいです。
方法として内部側(?)を使えばできるというのもあればぜひ。


この書き方でいいのかよくわからないのですが、宜しくお願いします。

引用返信 編集キー/
■41909 / inTopicNo.2)  Re[1]: ASP.NET C# でのFileUpLoadについての質問
□投稿者/ ?? (7回)-(2009/10/03(Sat) 01:53:37)
firefoxは無理かな。たぶん。

以下、IE7/Chrome 共通。

safari はエンジンは共通だけどどーでしょう・・・

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD> 
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE></TITLE>
</HEAD>
<BODY>
<script>
function showFileSelectDialog(me) {

	setTimeout(function(f) {
	
		return function() {
		
			if (f.upload.value != "") {
				f.fileName.value = f.upload.value;
			}
			else {
				setTimeout(arguments.callee, 500);
			}
		
		}
	
	}(me.form), 500);

	//Chrome は click() で止まらず。
	//IE はとまる。
	//Firefox は、
	me.form.upload.click();
	
}
function delayClick() {

	setTimeout(function() {
		document.forms[0].upload2.click();
	},500);

}
</script>

<form>
FileName:<input type=text size=80 name="fileName" />
<input type=button value="..." onclick="showFileSelectDialog(this)" />
<table border width=400px style="position:absolute;z-index:2;left:-100px; top:-100px;">
<tr><td>
	<input type=file name=upload  />
</td></tr>
</table>
<input type=file name=upload2 /><input type=button value="CLCK" onclick="delayClick()" />
</form>

</BODY>
</HTML>

引用返信 編集キー/
■41910 / inTopicNo.3)  Re[2]: ASP.NET C# でのFileUpLoadについての質問
□投稿者/ ?? (8回)-(2009/10/03(Sat) 02:39:58)
FirefoxもこれでOK。かなり無茶してるけど。
フォーカスをタブ移動すると、どこにもあたらない瞬間があるでしょう。
たぶん、FileUpload の テキストBOXにフォーカスが当たっていますね。
まぁ、おそらくこれ以上は無理かと。

Firefox3.0
ChromeΒ
IE7
とりあえず、見た目まぁまぁ、挙動ほぼ同じ。


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD> 
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE></TITLE>
</HEAD>
<BODY>
<script>
function fileDlgIE_GC(me, fileName, selectName, click) {

	if (navigator.userAgent.indexOf("MSIE") > -1)
		fileDlgIE(me, fileName, selectName);
	else
		fileDlgGC_FF(me, fileName, selectName, true);
}

function fileDlgIE(me, fileName, selectName) {

	//IE は click でとまるから簡単。

	me.form[selectName].click();

	me.form[fileName].value = me.form[selectName].value;

}
var timer = null;
function fileDlgGC_FF(me, fileName, selectName, click) {

	//Chrome と Firefox は止まらないのでタイマー監視
	//選択結果が同じだと延々回ってしまうけど、まぁ。。。
	

	if (timer != null) clearTimeout(timer);
	timer = null;
	timer = setTimeout(function(ofn, ofs) {
	
		return function() {
		
			if (ofn.value != ofs.value) {
				ofn.value = ofs.value;
				timer = null;
			}
			else {
				timer = setTimeout(arguments.callee, 500);
			}
		
		}
	
	}(me.form[fileName], me.form[selectName]), 500);

	//Chrome は click() で止まらず。
	//Firefox は、いんちきくさいやり方で対処。
	if (click)
		me.form[selectName].click();
	
}
function delayClick() {

	setTimeout(function() {
		document.forms[0].upload2.click();
	},500);

}
</script>

<form>
FileName:<input type=text size=80 name="fileName" />
<input type=button value="..." onclick="fileDlgIE_GC(this, 'fileName', 'upload', true)" />
<table border width=400px style="position:absolute;z-index:2;left:-100px; top:-100px;">
<tr><td>
	<input type=file name=upload  />
</td></tr>
</table>
<hr />
<div style="position:relative;width:500px;margin:0px;border:solid 1px red;height:24px;">
	<div style="position:absolute;left:0;top:0;z-index:2;">
		<input type=text style="width:440px;background-color:pink" name="fileName2" />
	</div>
	<div style="position:absolute;right:0;top:0;z-index:1;">
		<input type=file name=upload3 onclick="fileDlgGC_FF(this, 'fileName2', 'upload3', false)" />
	</div>
	
</div>
<input type=button value="FF" onclick="alert(this.form.upload3.value)" />
</form>

</BODY>
</HTML>

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -