私はサーバー側に投稿要求をするために私はファイルを作成しています。そのファイルが作成されたらブラウザに表示する必要があります。そのファイルを表示することはできませんが、自分のサーバー側で別のメソッドを呼び出すために私のAjax関数でsuccess
イベントを使用することができます。このファイルをTempData
またはSession
変数を使用してメモリ内のバイト配列として格納しようとしています。 、私はajax success
(DisplayFile
と呼ばれています)を呼び出している他のメソッドでそれらを読むが、TempData
変数は、DisplayFileメソッドが呼び出されると常にnullです...これを行うための別の提案があれば、私はバイト配列をJQueryに送信し、別のリクエストをパラメータとして渡すことを考えていましたが、それはバイトの非常に長い列...、私は... DisplayFile
メソッドは、クライアント側から呼び出されたときTempData
値がnullである理由はわからないTempData変数にアクセスする
$.ajax({ url: "/FileManagement/Files",
type: 'post',
data: formData,
success: function(result){
window.location = "/FileManagement/DisplayFile"
}
})
public JsonResult Files(//parameters...)
{
//...some code
TempData["BytesArray"] = fileBytes; //fileBytes is an array of bytes
TempData["FileName"] = fileName;
}
public ActionResult DisplayFile()
{
var file = TempData["BytesArray"]; //null
var fileName = TempData["FileName"];
}
UPDATE それはTempDataをするのではなく、セッション変数で今働いています、おそらくそれはこのコントローラがAreasフォルダ内にあるからでしょうか?このコントローラーはControllersフォルダー内にはありません。セッションが機能するためには、それを行う必要があります。System.Web.HttpContext.Current.Session["test"] = "asasa";
私はまだTempDataで値がnullであることを理解しようとしています2番目のメソッドが呼び出されたとき...
ファイルをどこかに格納する場合は、ファイルの識別子をAjaxレスポンスに戻し、別のコントローラアクションはその識別子を入力として取得し、ファイルコンテンツをストアから取得してダウンロードできるようにする必要があります。 –
@ChetanRanpariya私はこのアプローチを使用していましたが、ファイルが非同期に格納されていて、時々アクセスしようとしたときにまだ作成されていないため、ファイルをバイト配列として取り出して表示しようとしていますあなたの提案に感謝します – AlexGH
私はあなたがしようとしているものを正確に行いました。それは私のために働いた。私はあなたの参照のためのプロジェクトをここにアップロードしました:https://1drv.ms/u/s!Ag2RGwevtqKWhmUkk_tRgJFIoMlA – Saket