我正在使用ajax向我的服務器端發出發佈請求,我正在創建一個文件,一旦該文件已經創建,我需要在我的瀏覽器中顯示它,我讀過使用ajax是不可能顯示該文件,但我可以在我的ajax函數中使用我的success
事件來調用服務器端的另一個方法,我一直試圖將該文件存儲爲內存中的字節數組,使用TempData
或甚至Session
變量,然後使用另一種方法在ajax success
(稱爲DisplayFile
)上讀取它們,但在調用DisplayFile方法時TempData
變量始終爲空......如果您有不同的建議可以這樣做,一直在考慮將字節數組發送給JQuery,然後讓另一個請求將它作爲參數傳遞,但它是一個字節很長的陣列..,我不知道爲什麼TempData
值爲null時DisplayFile
方法是從客戶端叫...訪問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 它現在用Session變量,而不是工作的TempData的,也許是因爲這個控制器在Areas文件夾中?此控制器不在Controllers文件夾內,也許它與此有關,爲了讓Session工作,我不得不使用它的完整路徑:System.Web.HttpContext.Current.Session["test"] = "asasa";
我仍然試圖找出爲什麼TempData的值爲null當第二種方法被稱爲...
如果您將文件存儲在某處,則會將某個文件標識符返回給Ajax響應,而另一個控制器操作應將該標識符作爲輸入並從存儲中檢索文件內容並使其可供下載。 –
@ChetanRanpariya我正在使用這種方法,但文件被異步存儲,當我嘗試訪問它有時它還沒有被創建,這就是爲什麼我試圖檢索文件作爲一個字節數組,然後顯示它,感謝您的建議 – AlexGH
我確實做了你想做的事情。它爲我工作。我上傳了該項目供您參考:https://1drv.ms/u/s!Ag2RGwevtqKWhmUkk_tRgJFIoMlA – Saket