2014-12-05 106 views
0

我使用MVC5。我有一些使用HttpPostedFileBase上传文件的问题。我有一个表单,我可以从我的磁盘中选择一个文件并键入一些关于它的信息(在文本框中)。当我提交表格时,控制器动作被调用。在这个动作中,我打开文件并检查它是否有一些特定的数据(与文本框中的数据相关)。所以我在这里做一些验证。我不能用JQuery来做 - 它很复杂。服务器端验证是唯一的选择。最后,如果验证失败,我将模型(包含文件)返回到视图,但在此之后,文件字段旁边出现验证错误,但文件字段为空。我读过这很难将文件返回到视图。我不想使用ajax来上传文件。我想简单地做。如果你有一篇能够提供帮助的文章,请与我分享。自定义验证的HttpPostedFileBase

我该如何解决我的问题?

+0

这很简单,使用Ajax解决。使用该方法有什么问题? – Shoe 2014-12-05 20:13:07

回答

0

我知道你提到不使用AJAX做文件上传,但我认为这个解决方案是一个非常简单的。

使用下面的jQuery插件(https://blueimp.github.io/jQuery-File-Upload/),您可以自动执行该过程,并且如果文件中存在任何验证问题,则可以返回以下模型并返回错误。

string errors = "Errors returned from complex logic"; 
if (!String.IsNullOrEmpty(errors)) 
{ 
    // error response 
    status = new ViewDataUploadFilesResult() 
    { 
     name = Path.GetFileName(hpf.FileName), 
     size = hpf.ContentLength, 
     error = errors 
    }; 
} 

这里需要的是jQuery的文件上传文档相匹配的响应类:https://github.com/blueimp/jQuery-File-Upload/wiki/Setup

public class ViewDataUploadFilesResult 
{ 
    public string name { get; set; } 
    public int size { get; set; } 
    public string type { get; set; } 
    public string url { get; set; } 
    public string error { get; set; } 
} 

如果我理解正确,因为文件已在用户的计算机上,你只需要将文件关联到他们正尝试上传的当前文件以返回错误。并且为了使它们不必重新选择要上传的文件。我没有看到任何其他理由需要将实际文件返回给用户,因为他们已经有了他们正在上传的文件。