web-dev-qa-db-ja.com

UpdatePanel内のFileUpload.PostedFileは常にnull

UpdatePanel内にFileUploadコントロールがあります。完全なポストバックを実行するために、アップロードボタンをscriptmanagerに正常に登録しました。私が抱えている唯一の問題は、FileUpload.HasFileが常にnullを返すことです。注:FileUploadコントロールをupdatepanelの外に移動すると、すべてがファイルとして機能します。これに対する解決策または回避策はありますか?.

ありがとう。

13
Steven

FileUploadコントロールをUpdatePanelに配置できますが、AsyncPostBackTriggerではなくPostBackTriggerを使用する必要があります。私は最近このアプローチを使用し、両方のタイプのトリガーを組み合わせました。

    <Triggers>
        <asp:PostBackTrigger ControlID="btnSave" />
        <asp:AsyncPostBackTrigger ControlID="btnAsyncSave"/>
    </Triggers>

PostBackTriggerはFileUploadsに使用され、AsyncPostBackTriggerは他のすべてのフォームフィールドに使用されました。

12
rf_wilson

FileUploadはUpdatePanel内では機能しません。あなたはASPNET AJAX control Toolkitから AsyncFileUploadを使用する必要があります。


AsyncFileUploadを使用する場合は、ページまたはマスターページに配置されるformタグに適切なパラメーターを設定する必要があります。

<form id="form1" runat="server" enctype="multipart/form-data" method="post">

適切なenctypeとメソッドを設定しないとUploadedCompleteは起動せず、取得できませんFileUpload.FileBytesFileUpload.HasFileは、UploadedCompleteの実行中にのみtrueを返すためです。


さらに、以前のバージョンのAsyncFileUploadはChromeでは機能しませんでした。実際のバージョン(4.1.50731.0)で問題が解決しました。

5
Emanuele Greco

これは、MSAjax1.0にまでさかのぼる古い問題です。 FileUploadコントロールは、更新パネルの動作方法およびスクリプトマネージャーと互換性がありません。ファイルのアップロードによりデータストリームが変更され、スクリプトマネージャーがチョークします。それが機能する唯一の方法は、更新パネルの外にファイルアップロードコントロールを置くことです。ファイルアップロードコントロールに依存する他のコントロールがページにある場合は、ポストバックの追加トリガーを設定する必要があります。

4
Cris Valenzuela
<Triggers>
        <asp:PostBackTrigger ControlID="btnSave" />
</Triggers>

更新パネルの外にファイルアップロードコントロールを配置します。ファイルアップロードコントロールに依存する他のコントロールがページにある場合は、ポストバックの追加トリガーを設定する必要があります。

私が抱えていた問題は、ポストバックをトリガーするボタンがUpdatePanelにあることでした(理由はわかりません)。それらをUpdatePanelの外に移動すると、問題が修正されました。

0
combatc2