HttpPostedFileBase的自定义验证

时间:2014-12-05 18:27:55

标签: asp.net-mvc asp.net-mvc-5 httppostedfilebase

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

如何解决我的问题?

1 个答案:

答案 0 :(得分: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; }
}

如果我理解正确,由于该文件已经在用户计算机上,您只需要将文件与他们尝试上传的当前文件相关联即可返回错误。为此,他们不必重新选择要上传的文件。我没有看到任何其他理由需要将实际文件返回给用户,因为他们已经拥有了他们正在上传的文件。