2015-09-07 46 views
2

我爲多張圖片上傳創建了一個簡單的機制。從服務器上傳並返回多個HttpPostedFiles

文件正在正確上傳到服務器,但是當我在服務器端出現錯誤時,我做了ModelState.AddModelError("PostedPhotos", "Error msg");並將我的viewmodel傳回到視圖,我想再次顯示這個錯誤和圖片預覽。

不幸的是,PostedPhotosnull。也許我以一種錯誤的方式來綁定某些東西

在我的ViewModel PostedPhotos是:

public List<HttpPostedFileBase> PostedPhotos { get; set; } 

在我看來:

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.TextBoxFor(m => m.PostedPhotos, new { name = "PostedPhotos[]", type = "file", multiple = "multiple" }) 
} 

是否可以通過我的文件備份?我想做一些愚蠢的解決方法。我可以使用單個HttpPostedFileBase創建隱藏輸入,然後使用jQuery設置$(myPostedPhotosInput)[0].files = getFilesFromTrickySingleFileInputs();,但我不喜歡它。

+0

當您收到請求或呈現視圖以進行響應時,哪個時刻是'PostedPhotos' null?同時請發佈操作代碼 – Andrei

+0

收到我的請求後 – Nickon

+0

沒有想法的傢伙? – Nickon

回答

1

您無法使用return View()返回文件輸入的值。你也不能使用jquery設置值。這樣做將是一個重大的安全問題。有人可以創建一個包含多個隱藏文件輸入的網站,將這些值設置爲常用文件名(例如C:\ password.doc),然後在您不知情的情況下下載您的文件。

如果您返回視圖,用戶需要重新選擇文件。或者,您可以在第一次提交時(可能是臨時位置)保存文件並返回文件名(視圖模型或ViewBag屬性),以便通知用戶這些文件已上傳並且不需要被重新選擇。