- PR -

[ASP.NET] VS2005でマスターページと、アップロード

1
投稿者投稿内容
うきょきょ
常連さん
会議室デビュー日: 2004/01/09
投稿数: 44
投稿日時: 2006-03-10 16:32
[はじめに]
スレッドを分けようか迷いましたが、かけ離れているわけではないので、
同一スレッドに書き込みます。

[質問内容]
1.ファイルのアップロード
 この会議室の過去ログを調べてもファイルのアップロードを行うには、
 ファイル選択ダイアログと実際のアップロード(submit)を行うボタンが違う
 のですが、この2つを1つのボタンで実装することは可能でしょうか?
   クライアント:ボタンクリック
         ↓
   クライアント:ファイルダイアログ表示→ファイル選択
         ↓
   サーバー  :ファイルアップロード処理

 なおVS2005のファイルアップロードコントロールは、ファイルのフルパスを
 表示する所が出るため、使えないのです。
#クライアントはIEのみですのでScriptを使う場合、
#JavaScriptだろうと、VBScriptだろうと問題ありません。
#ただしバージョンは不明(W2KProのデフォルトはIE5.0以上なら可かな?)

2.VS2005のマスターページを使用している状態で、enctype="multipart/form-data"を
 アップロードを関係ないところで指定しても大丈夫かどうか。
   マスターページにfromタグが1つある状態になるため、他のまったく関係ない
   ページにも、enctype="multipart/form-data"が設定されてても問題ないか?
   動作することは確認しましたがなんとなく、気になったので^^;

よろしくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-03-10 17:00
> ファイル選択ダイアログと実際のアップロード(submit)を行うボタンが違う
> のですが、この2つを1つのボタンで実装することは可能でしょうか?

できないと思います。
Inputタグを使わない、ということですよね。たぶん無理かと。

> マスターページにfromタグが1つある状態になるため、他のまったく関係ない
> ページにも、enctype="multipart/form-data"が設定されてても問題ないか?

ファイルアップロードコントロールを利用する場合は、コンテンツページの
ほうにコントロールを貼り付けると自動的にそのページが表示されるときだけ
enctype="multipart/form-data"が設定されますね。
各コンテンツページからマスターページの設定を変更することは可能なので
必要ないところには設定しなければいいと思います。
OpS
ベテラン
会議室デビュー日: 2003/12/09
投稿数: 50
投稿日時: 2006-03-10 17:28
横から失礼します。

submitを行うボタンは非表示にしておいて、

aspxファイルには、
<asp:button id=btnAdd runat="server" Font-Size="xx-small" Visible="false" Text="追加"></asp:button>
<INPUT id=txtAttachment type=file size=50 name=B runat="Server">
というふうに、INPUTとボタンを配置しています。

Page_Loadで、
txtAttachment.Attributes.Add("OnPropertyChange", GetPostBackEventReference(btnAdd));
を記述します。

これは、ファイルの選択でファイルを選択して、開くボタンが押されたら、ボタンbtnAddを実行されるようにしています。

このようにすると、1つのボタンで処理が行えるようになります。




[ メッセージ編集済み 編集者: OpS 編集日時 2006-03-10 17:31 ]

[ メッセージ編集済み 編集者: OpS 編集日時 2006-03-10 17:46 ]
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-03-11 06:42
引用:

Page_Loadで、
txtAttachment.Attributes.Add("OnPropertyChange", GetPostBackEventReference(btnAdd));
を記述します。


このテクニック便利ですよね。子ウィンドウから親ウィンドウをポストバックさせるとかいろんな処理に応用できます。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
うきょきょ
常連さん
会議室デビュー日: 2004/01/09
投稿数: 44
投稿日時: 2006-03-13 12:59
マルチレス失礼します。

>どっとねっとふぁんさん
 CreateObjectでコモンダイアログ出せないかと思ったのですが、
 よく考えたら、セキュリティーホールになっちゃいますよね。

 ファイルアップロードコントロールを貼り付けた場合、そのページだけ
 enctypeが設定されるのを確認しました。

>OpSさん
 OnPropertyChangeなんてあったんですね。しらなかった。
 それと、GetPostBackEventReferenceは、ASP.NET 2.0では
 ClientScriptManagerクラスの下のヤツが推奨されていて、
 引数がちょっと変わったみたいです。
 でも、動作できました。ありがとうございます。

>Accessさん
 確かにこのテクニック便利ですね。今までの別のプロジェクトにも応用が効いたと
 思います。奥が深い。
TAKAPONPON
会議室デビュー日: 2009/01/16
投稿数: 1
投稿日時: 2009-01-16 09:33
はじめまして

マスターページを利用しており、同様に一部のページでファイルアップロードがあるためこちらのスレッドを参考にさせていただきました。

>ファイルアップロードコントロールを利用する場合は、コンテンツページの
>ほうにコントロールを貼り付けると自動的にそのページが表示されるときだけ
>enctype="multipart/form-data"が設定されますね。
私の場合は、ファイルアップロードコントロールが配置されていないページにも影響してしまうので、どっとねっとふぁんさんの下記の手順をとりました

>各コンテンツページからマスターページの設定を変更することは可能なので
>必要ないところには設定しなければいいと思います。
ファイルアップロードコントロールが配置されているページのロード処理で下記のコードを実装しました。
無事、ファイルアップロードコントロールが配置されているページのみEnctypeが設定されていました。

コード(C#)
HtmlForm frm = (HtmlForm)Page.Master.FindControl("form1");
frm.Enctype = "multipart/form-data";

おかげさまで解決できました。
ありがとうございます。
1

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