且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Request.files在MVC文件上传中为空

更新时间:2023-02-25 13:26:02

您需要在控制器操作参数中使用 HttpPostedFileBase 来获取已经发布的字段。



请请阅读Phil Haack撰写的文章


I have the same issue

@using (Html.BeginForm("CreateRequest", "SupportRequest", FormMethod.Post, new { id = "frmStemplate", enctype = "multipart/form-data" }))
{
  <td><input type="file" name="FirstFile" id="FirstFile" class="button"  /> 
  <input  type="button" class="button" id="FirstFileupload"  value="upload" onclick="Javascript:DocumentUpload();"/>
}

<script language="javascript" type="text/javascript">
    function DocumentUpload()
    {
        var BrowseFile = $('#FirstFile').val();

        if (BrowseFile != null && BrowseFile != "") {
            alert(BrowseFile);
            $.ajax({
                type: 'POST',
                dataType: 'json',
                url: '@Url.Content("~/SupportRequest/UploadFiles")?fileElementId=' + BrowseFile,
                success: function (data) {
                    alert('Hi'); //debugger;
                    if (data.Result == "SUCCESS") {
                        alert('Hi');
                    }
                    else {
                        ShowInfo('Document Uploaded Successfully');
                    }
                }
            });
        }
    }
</script>

On the controller side, I have:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UploadFiles(string fileElementId, FormCollection formColl)
{
    var FirstFile = Request.Files;
    foreach (string upload in Request.Files)
    {
        if (!Request.Files[upload].HasFile()) continue;
        string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/";
        string filename = Path.GetFileName(Request.Files[upload].FileName);
        Request.Files[upload].SaveAs(Path.Combine(path, filename));
    }
    return Json(new { Filename = "" });
}

But my Request.Files is always null.

I tried several things, like changing the code to Request.Files["FirstFile"], etc. Each time, the file collection is empty.

You need to use HttpPostedFileBase in controller action parameters inorder to get the filedata that you have posted.

Please read this full article by Phil Haack