web-dev-qa-db-ja.com

UpdatePanelにネストすると、FileUploadが機能しませんか? C#

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                        <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" />
                </Triggers>
</asp:UpdatePanel>

ボタン1は更新パネルの外にあり、ユーザーがアップロードボックスにファイルを追加したときに実行されるJavaScriptは次のとおりです。

function clickTheButton() {
            document.getElementById('<%= Button1.ClientID %>').click();
        }

問題は単純です。FileUpload1.HasFile== false。これがなぜであるかはわかりませんが、更新パネルに配置すると機能しなくなります。

私はこれについて他のいくつかのスレッドを見てきました。しかし、なぜこれが起こっているのかについては誰も答えていません。ダウンロードできるものを指しているだけです。

編集:これを実行したい主な理由は、クライアントがサーバーにアップロードしているときにポップアップする..Uploading File ..タグを取得し、完了したら、に表示するためです。データリスト。UpdateProgressを機能させることができません。

16
Jason

基本的には、ファイルを送信するためにボタンに完全なポストバックを実行させる必要があります。また、this.Form.Enctype = "multipart/form-data";があることを確認してください。コードで設定するか、そのページに配置できます。 AsyncPostbacksは、前述のようにセキュリティ上の理由から、ハッキングなしではファイルを処理しません。 (私はそれを機能させることができませんでした)。

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
      <ContentTemplate>
           <asp:FileUpload onchange="clickTheButton();" ID="FileUpload1" runat="server" />
      </ContentTemplate>
      <Triggers>
         <asp:PostBackTrigger ControlID="Button1" />
      </Triggers>
 </asp:UpdatePanel>
15
jamone

セキュリティ上の理由から、ブラウザではjavascriptを介してファイルを投稿することはできません。マイドキュメントフォルダの内容をサーバーに非同期で送信するJavaScriptを少し書くことができると想像してみてください。

そのため、UpdatePanelで使用されるXMLHttpRequestのように、フォームを投稿するjavascript風のメソッドは機能しません。

この投稿では、3.5SP1を使用している場合の適切な回避策について説明します。 http://geekswithblogs.net/ranganh/archive/2009/10/01/fileupload-in-updatepanel-asp.net-like-gmail.aspx

また、この投稿では、AjaxControlToolkitを使用したくない場合のいくつかの回避策について説明します。 http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx

4
Kyle Chafin

ファイルのアップロードは、部分的なポストバックでは機能しません。したがって、ページの読み込み時にこの行を追加するだけです

ScriptManager.GetCurrent(this).RegisterPostBackControl(this.YourControlID);

または、PostBackTriggerを使用します。

<Triggers>
            <asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>

または、AjaxControlToolkitで定義されている特別なAsyncFileUploadコントロールが必要です。

<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
     OnClientUploadComplete="uploadComplete" runat="server"
     ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
     UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />

ここ を確認できます。

4
Litisqe Kumar