Razor上传文件返回null

时间:2014-06-03 11:29:49

标签: c# asp.net asp.net-mvc-4 razor file-upload

我的c#代码存在一些问题,用于上传某个文件...在控制器文件中检测到空。

我的HTML代码

   @using (Html.BeginForm("Index", "UploadHistory",FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="uploadFile" id="uploadFile" />
 <input type="submit" value="Upload File" id="btnSubmit" />
}

和我控制器的代码

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase uploadFile)
    {
        // Verify that the user selected a file
        if (uploadFile != null && uploadFile.ContentLength > 0)
        {
            // extract only the fielname
            var fileName = Path.GetFileName(uploadFile.FileName);
            // store the file inside ~/App_Data/uploads folder
            var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
            uploadFile.SaveAs(path);
        }
        // redirect back to the index action to show the form once again
        return RedirectToAction("Index");
    }

为什么我的上传文件检测到null?我用C#mvc 4和razor谢谢你。

[解决] 只是在javascript方法帖子中出错。

4 个答案:

答案 0 :(得分:1)

请参阅此链接

Possible copy of

简而言之

使用

public ActionResult Index(HttpPostedFileBase uploadFile)

同时更改

<input type="file" name="file" id="file" />

<input type="file" name="uploadFile" id="uploadFile" />

答案 1 :(得分:0)

我不确定模型绑定在这种情况下是否有效。您需要使用HttpPostedFileBase作为控制器操作的参数,或者需要使用Request.Files选项。

使用Request.Files选项。

foreach (string file in Request.Files)
{
   HttpPostedFile hpf = Request.Files[file] as HttpPostedFile;
   if (hpf.ContentLength == 0)
      continue;
   string savedFileName = Path.Combine(
      AppDomain.CurrentDomain.BaseDirectory, 
      Path.GetFileName(hpf.FileName));
   hpf.SaveAs(savedFileName);
}
编辑:在这里,我发现了一个使用类似场景的博客(模型绑定)。它可能会对您有所帮助 - http://cpratt.co/file-uploads-in-asp-net-mvc-with-view-models/

答案 2 :(得分:0)

使用以下

[HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {

        if (file != null && file.ContentLength > 0) 
        {

            var fileName = Path.GetFileName(file.FileName);

            var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
            file.SaveAs(path);
        }

        return RedirectToAction("Index");        
    }

主要在参数

中使用HttpPostedFileBase

答案 3 :(得分:0)

以下内容对您有用:

<强>模型

public class UploadFileModel 
{
    public UploadFileModel()
    {
        Files = new List<HttpPostedFileBase>();
    }

    public List<HttpPostedFileBase> Files { get; set; }

}

查看

@using (Html.BeginForm("Index", "Home",FormMethod.Post, new { enctype = "multipart/form-data" }))
{
 Html.TextBoxFor(m => m.Files.Files, new { type = "file", name = "Files" })
 <input type="submit" value="Upload File" id="btnSubmit" />
}

<强>控制器

[HttpPost]
public ActionResult Index(UploadFileModel model)
{
    var file = model.Files[0];
    return View(model);
}