- PR -

UpdatePanel内でのFileUploadの使用法

1
投稿者投稿内容
メル
会議室デビュー日: 2007/07/10
投稿数: 3
投稿日時: 2007-07-10 17:16
いつもお世話になっております。

VS2005(C#)で開発をしています。

早速質問に移りますが、UpdatePanel内でのFileUploadの使用法について伺おうと思い今回書き込みを致しました。

色々調べて、基本的には不可能だと知ったのですが、例外措置(?)として行う方法があることを以下の記述で知ることが出来ました。


To use a FileUpload control inside an UpdatePanel control, set the postback control that submits the file to be a PostBackTrigger control for the panel.
(参照記事より抜粋)


しかし、PostBackTriggerコントロールの使い方も分からず、どうしようもなくなってしまったので書き込んだ次第です。

UpdatePanel内でのFileUploadの使用法、どなたかご教授お願い致します。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2007-07-10 18:21
引用:
set the postback control that submits the file to be a PostBackTrigger control for the panel.

UpdatePanelのTriggersプロパティにsubmitを行うコントロール(つまりボタンとか)を設定せよ、
という意味っぽいですね。当方ではそういう風にしたらFileUploadのPostedFileが取れましたから。

#初めてASP.NET AJAX動かしてみたけど、すげえなこりゃ。。。
#魔法の杖シンドロームにかからないようにしなきゃ。。。

#あ、ちゃんとPostBackTriggerて名前だったのですね。見落としてました。

#そしてこの場合は非同期ではないのか。

[ メッセージ編集済み 編集者: べる 編集日時 2007-07-11 11:50 ]
メル
会議室デビュー日: 2007/07/10
投稿数: 3
投稿日時: 2007-07-10 19:31
べるさん

返答ありがとうございます。
記述の通りにすることで、無事PostedFile取得に成功しました。
本当にありがとうございます。


----------------------------------------------------------------

<解決手順>

1.UpdatePanelのプロパティからTriggersを選択。
2.コレクションエディタ画面が開くので、追加ボタンから「PostBackTrigger」を選択し追加。
3.右枠「動作」の「ControlID」に、UpdatePanelを外したいコントロール(submit等を行うコントロール)のIDを記述(選択)する。

以上
----------------------------------------------------------------


Ajaxは確かに色んなことが簡単に出来そうな気になってしまいますよね。。。
私も気を付けようと思います。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-07-11 07:38
FileUploadはそもそもパーシャルポストバックができないわけですから、
UpdatePanelを追加してわざわざフルポストバックさせるよりも
UpdatePanelを使わない方がシンプルになると思うのですが。

FileUploadにUpdatePanelを使うメリットはあるのでしょうか。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
メル
会議室デビュー日: 2007/07/10
投稿数: 3
投稿日時: 2007-07-11 09:23
Accessさん

質問の回答になるかはわかりませんが、今回の疑問の背景には、開発するWebアプリの相手側の要求が関係しています。

その要求とは、「画面遷移をなるべくスムーズに(ちらつきをなくす)」というものです。

そこで今回は、マスターページを利用して、ContentPlaceHolderそのものをUpdatePanelにかけるという方法で開発を開始しました。
ところがこの方法だと、サブページ全体にUpdatePanelが効いてしまうが故、FileUploadを使おうとした際に困ってしまった、というわけです。

今回の処理方法で、FileUploadを行うときのみUpdatePanel効果を外し、その他の処理ではUpdatePanelを効かせる、ということが可能となりました。


要約すると、
・FileUploadコントロールはUpdatePanel内では動かないので、やむなく効果を外すしかない。
・複数の処理のうち、一部だけUpdatePanel効果を外したい場合に今回の方法を使用する。
ということになります。


------------------------------------------------------------------

<解決手順・追記>
・マスターページを利用して、ContentPlaceHolderをUpdatePanelにかける場合、UpdatePanelを外したいコントロールそのものにもUpdatePanelをかけ(UpdatePanelの入れ子状態になっています)、そのUpdatePanelで上記手順を行う。
・MaltiViewを利用していると2枚目のView以降では思うように処理が動かない可能性がある。対策方法としては、MaltiViewのメソッド、SetActiveView()を使い、そのViewをアクティブにしてから処理を行うことが挙げられる。

以上

------------------------------------------------------------------

#UpdatePanelは入れ子状態を許可してるんですけれども、こういう使い方は正しいのでしょうか(、、;
#そもそもUpdatePanelを入れ子許可にした理由がわからない。。。

#誤字による編集を行いました。


[ メッセージ編集済み 編集者: メル 編集日時 2007-07-11 09:39 ]
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-07-12 08:12
>>そこで今回は、マスターページを利用して、ContentPlaceHolderそのものをUpdatePanelにかけるという方法で開発を開始しました。

UpdatePanelをマスターページではなく、コンテンツページに配置すれば
解決すると思うのですが・・・

マスターページに配置すると、Webページごとの個別の対応ができないかと・・・

余談ですが、UpdatePanelを配置してページを部分的に更新させると

・コンテンツが更新されたことを明示的に認識させる必要がある
・ブラウザの履歴(戻るボタン)が無効になる

などの問題が発生します。

事前にこれらの問題を解決しておくことをお勧めします。

これらの問題は、米国のあるクライアントで実際に発生した実話です。

かなりの工数をかけてこれらの対策を行ったようです。

これらの問題を解決するには、以下のサンプルが参考になるかと。


コンテンツが更新されたことを明示的に認識させる
http://www.ishopasp.info/samples/070417CS-4.aspx
http://www.ishopasp.info/samples/070417CS-5.aspx
http://www.ishopasp.info/samples/070417CS-6.aspx


ブラウザの履歴を保持する(戻るボタンに有効にする)
http://www.ishopasp.info/samples/070417CS-3.aspx
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
1

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