2017-06-05 43 views
1

私はサーバー側に投稿要求をするために私はファイルを作成しています。そのファイルが作成されたらブラウザに表示する必要があります。そのファイルを表示することはできませんが、自分のサーバー側で別のメソッドを呼び出すために私のAjax関数でsuccessイベントを使用することができます。このファイルをTempDataまたはSession変数を使用してメモリ内のバイト配列として格納しようとしています。 、私はajax successDisplayFileと呼ばれています)を呼び出している他のメソッドでそれらを読むが、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番目のメソッドが呼び出されたとき...

+0

ファイルをどこかに格納する場合は、ファイルの識別子をAjaxレスポンスに戻し、別のコントローラアクションはその識別子を入力として取得し、ファイルコンテンツをストアから取得してダウンロードできるようにする必要があります。 –

+0

@ChetanRanpariya私はこのアプローチを使用していましたが、ファイルが非同期に格納されていて、時々アクセスしようとしたときにまだ作成されていないため、ファイルをバイト配列として取り出して表示しようとしていますあなたの提案に感謝します – AlexGH

+0

私はあなたがしようとしているものを正確に行いました。それは私のために働いた。私はあなたの参照のためのプロジェクトをここにアップロードしました:https://1drv.ms/u/s!Ag2RGwevtqKWhmUkk_tRgJFIoMlA – Saket

答えて

0

が、私はAreasフォルダ内のコントローラを使用しています、ので、多分そのせいTempDataの方法を動作していない役に立つことを願っています私は.. Controllersフォルダ内のコントローラで、私はそのパスを使用する必要はありませんが、私はそれに完全なパスを使用する必要があり、このコントローラで動作するようにするにはSession変数について、期待

public JsonResult Files(//parameters...) 
{ 
//...some code 
    System.Web.HttpContext.Current.Session["FileInBytes"] = bytesArray; //fileBytes is an array of bytes 
    System.Web.HttpContext.Current.Session["FileName"] = fileName;; 
} 

public ActionResult DisplayFile() 
{ 
    var fileInBytes = Session["FileInBytes"] as byte[]; 
    var fileName = Session["FileName"] as string; 
    Session.Remove("FileInBytes"); 
    Session.Remove("FileName"); 
} 
0

あなたのやり方は正しいです。それは、それがajaxのものであっても、さらなる取得要求でtempdataにアクセスできるはずです。

はほとんどあなたが

欲しいものに関連し、この受け入れ答えを、参照してください。https://forums.asp.net/t/1911620.aspx?How+to+pass+tempdata+to+controller+from+view+

キャストがあなたのために問題がある可能性があります。それを試してください。

は、私が最終的にSession変数を使用して終了

おかげ カルティク

関連する問題