2015-09-07 48 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属性),以便通知用户这些文件已上传并且不需要被重新选择。