1

ファイル ダウンロード コードを書きましたが、プロジェクトで開始するとこのエラーが発生します。このコードだけが完全に正常に動作します。しかし、複雑なプロジェクトでは、このエラーが発生しました。それについて助けてもらえますか?ダウンロードコードはこちら

string fileUrl = @filePath + "\\" + _DownloadableProductFileName;
            string newFileName = _DownloadableProductFileName;
            FileStream fs = new FileStream(fileUrl, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[(int)fs.Length];
            fs.Read(buffer, 0, (int)fs.Length);
            fs.Close();
            Response.Clear();
            Response.AddHeader("Content-Length", buffer.Length.ToString());
            Response.AddHeader("Content-Disposition", "attachment; filename=" + newFileName);
            Response.BinaryWrite(buffer);
            Response.End();

そしてエラーコードは

Microsoft JScript ランタイム エラー: エラー c00ce514 のため、操作を完了できませんでした。

ここでエラーが発生します。

get_responseData: function XMLHttpExecutor$get_responseData() {
    /// <value type="String" locid="P:J#Sys.Net.XMLHttpExecutor.responseData">The text of the response.</value>
    if (arguments.length !== 0) throw Error.parameterCount();
    if (!this._responseAvailable) {
        throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_responseData'));
    }
    if (!this._xmlHttpRequest) {
        throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_responseData'));
    }

    return this._xmlHttpRequest.responseText; //here throw error
},
4

1 に答える 1

0

プロトコルのためだけに(2年遅れ;)。このエラーは、非同期ポストバックを実行する更新パネル内にダウンロード コードが配置されている場合に発生します。バイナリ ファイルを配信するリクエストが常に同期ポストバックを実行することを確認して、ブラウザーがバイナリ結果ファイルを解釈できるようにする必要があります (HTML フラグメントを予期した XMLHttpExecutor ではありません)。

解決策:ボタンの名前をPostBackTriggerとして配置するか、ボタンを登録します。

ScriptManager.GetCurrent(Page).RegisterPostBackControl(yourButton)
于 2014-08-29T05:29:53.917 に答える