none
FileUploadとポストバックごとの送信 RRS feed

  • 質問

  • 初めて投稿いたします。

    今、C#.NetでFileUploadを使用した画面を作成中ですが、画面項目の中にAutoPostBackでマスタからリストを
    取得するプルダウンがいくつかあります。

    この画面ですと、プルダウンを操作するたびに、設定してあるファイルがアップロードされてしまうと思いますが、
    .Netのコンポーネントを素直に使う形で解決する方法はありますでしょうか。

    既知の問題かと思いますので、他の質問へのリンクなどもございましたら教えていただけると幸いです。
    2007年11月3日 8:37

回答

  • なかなかうまい手を思いつかないのですが、とりあえずOnSubmit時にevent.srcElement.idでアップロードボタンが押されたどうかを判断し、そうでなければFileUploadを空白にして逃げるという手があります。

    FileUploadのvalueはそのままでは空白にはできないので、FileUploadをspanでくくっておき、そのspanのinnerHTMLに同じspanのinnerHTMLを代入するようにすると、valueがリセットされます。

    valueがリセットされることによって逃げるというのがあまり美しくないのですが・・・

    2007年11月5日 7:02
    モデレータ

すべての返信

  • FileUploadにファイル名をセットした状態でプルダウンを操作してポストバックが発生した場合、ファイルはサーバーへアップロードされます。しかし、その後、FileUploadは空白に戻されますので、プルダウンを操作する度にファイルがアップロードされることはないと思います。

    2007年11月3日 16:38
    モデレータ
  •  trapemiya さんからの引用

    FileUploadにファイル名をセットした状態でプルダウンを操作してポストバックが発生した場合、ファイルはサーバーへアップロードされます。しかし、その後、FileUploadは空白に戻されますので、プルダウンを操作する度にファイルがアップロードされることはないと思います。



    ありがとうございます。

    ただ、今回の場合、UIの操作上からはAutoPostBack時にはファイル送信は無いかのような画面になってます。
    また、作りとしてもそうしたくはありません。

    可能であれば、マスタから生成するプルダウンのAutoPostBackはアップロード無しで行わせたいのですが、
    それは.Netでは不可能でしょうか。例えば、Formを分割するなどを考えましたが、.Netではそれはダメだと
    のことです。
    2007年11月3日 20:45
  • なかなかうまい手を思いつかないのですが、とりあえずOnSubmit時にevent.srcElement.idでアップロードボタンが押されたどうかを判断し、そうでなければFileUploadを空白にして逃げるという手があります。

    FileUploadのvalueはそのままでは空白にはできないので、FileUploadをspanでくくっておき、そのspanのinnerHTMLに同じspanのinnerHTMLを代入するようにすると、valueがリセットされます。

    valueがリセットされることによって逃げるというのがあまり美しくないのですが・・・

    2007年11月5日 7:02
    モデレータ
  •  trapemiya さんからの引用

    なかなかうまい手を思いつかないのですが、とりあえずOnSubmit時にevent.srcElement.idでアップロードボタンが押されたどうかを判断し、そうでなければFileUploadを空白にして逃げるという手があります。



    なるほど!そういう手はありますね。

    後はドロップダウンリストをAjax実装にするといった方法になるのでしょうか。調べてみると、AutoPostBackで
    ファイルパスの欄が空白になるということを問題にするものは結構見つかったのですが、毎回ファイルが送信
    されていることを問題にしている記事があまり見つからなかったのです。ちょっと意外でした。

    通常の定石としては、アップロードのFormは別画面で行ったりするんでしょうか。以前、やはり.NETでアップロード
    を実装したことがありましたが、その際にはアップロード用のFormのみを持つ子画面をポップアップさせてました。

    Formが分割できない、というのはこういう時痛いですけど、皆さんはどうしているのかできればお聞かせ願えれば
    と思います。

    2007年11月5日 12:04
  •  

    初回投稿から結構経ちますので当スレッドは終わりにしたいと思います。結論としては、

     

    1.trapemiya さん案のJavaScriptによるサブミットボタン判定によるファイル送信制御。

    2.更新部分のAjax実装。

    3.仕様変更をし、ファイルアップロード部分をポップアップ等の別画面とする。

     

    あたりでしょうか。Ajax.Netの拡張を入れてみてちょっと試したのですが、部分更新については凄く簡単に実装可能です。

    デザインが動かせない場合には今後はこちらを選ぶべきかと感じました。

     

    また、今回に関しては、仕様変更をして別画面にする方法を取りました。他のサイト見ても現状ではそちらがメジャーかと

    思われます。

     

    ありがとうございました。

    2007年11月13日 3:22