自定义验证的HttpPostedFileBase
问题描述:
我使用MVC5。我有一些使用HttpPostedFileBase上传文件的问题。我有一个表单,我可以从我的磁盘中选择一个文件并键入一些关于它的信息(在文本框中)。当我提交表格时,控制器动作被调用。在这个动作中,我打开文件并检查它是否有一些特定的数据(与文本框中的数据相关)。所以我在这里做一些验证。我不能用JQuery来做 - 它很复杂。服务器端验证是唯一的选择。最后,如果验证失败,我将模型(包含文件)返回到视图,但在此之后,文件字段旁边出现验证错误,但文件字段为空。我读过这很难将文件返回到视图。我不想使用ajax来上传文件。我想简单地做。如果你有一篇能够提供帮助的文章,请与我分享。自定义验证的HttpPostedFileBase
我该如何解决我的问题?
答
我知道你提到不使用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; }
}
如果我理解正确,因为文件已在用户的计算机上,你只需要将文件关联到他们正尝试上传的当前文件以返回错误。并且为了使它们不必重新选择要上传的文件。我没有看到任何其他理由需要将实际文件返回给用户,因为他们已经有了他们正在上传的文件。
这很简单,使用Ajax解决。使用该方法有什么问题? – Shoe 2014-12-05 20:13:07