2

コントローラーに次のコードがあります。

public ActionResult downloadFile()
    {
        try
        {
            FileStream fs = new FileStream(helper.getFileLoc(), FileMode.Open);
            string mimeType = "Text File";
            FileStreamResult f = File(fs, mimeType, "myFile.txt");
            return f;
        }
        catch
        {
            return PartialView("_errorFile");
        }
    }

ファイルをダウンロードしたいのですが、例外がある場合は、エラー div で部分ビューをレンダリングしたいと考えています。

問題は@Html.ActionLink、メソッドを呼び出すと、ファイルを正しくダウンロードできるのに、例外が発生した場合、部分ビューのみを含むページにリダイレクトされることです。

一方、を使用する@Ajax.ActionLinkと、その div で例外が正しく処理されますが、例外がない場合は、ダウンロードではなくファイル内のテキストが取得されます。

私がここでやろうとしていることをする方法はありますか?

4

1 に答える 1

3

これまでに見つけた最善の方法は、ダウンロードを 2 段階で実行することです。最初の段階は AJAX 経由で呼び出すことができ、エラーの潜在的な原因をチェックします。最初のメッセージがゴーアヘッド メッセージを返した場合、javascriptwindow.locationは「確認済み」のダウンロード URL に変更されます。

このアプローチでは、これら 2 つの要求の間にネットワーク ドライブがサーバーから引っ張られた場合など、例外的なケースをうまく処理できません。ただし、ユーザーが要求されたファイルをダウンロードする権限を持っていない場合など、最も一般的な問題を適切に処理する必要があります。

于 2012-05-15T14:35:42.903 に答える