3

我将 C# 和 ASP.NET MVC4 用于 Web 应用程序(移动模板)。

现在我的视图中有以下代码:

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

这在我的控制器中:

    [HttpPost]
    public ActionResult Index(HttpPostedFileBase file)
    {
        string path = System.IO.Path.Combine(Server.MapPath("~/Content"), System.IO.Path.GetFileName(file.FileName));
        file.SaveAs(path);
        ViewBag.Message = "File uploaded successfully";
        return View();
    }

当我运行应用程序并尝试上传文件时,我得到“对象引用未设置为对象的实例”。Visual Studio 中的消息。但是我知道上面的代码在 ASP.NET MVC3 中运行良好,因为我以前使用过它。

谁能帮我这个?

4

2 回答 2

3

将此属性添加到您的表单:data-ajax="false"

@using(Html.BeginForm("Index", "Home", FormMethod.Post,  new { enctype="multipart/form-data", data_ajax="false"})){
     <label for="file">Upload:</label>
     <input type="file" name="file" id="file"/>
     <input type="submit" value="Upload" />
}
于 2013-02-04T17:59:52.533 回答
1

您不必使用HttpPostedFileBase,事实上您不必在 [HttpPost] 操作中接收任何参数。只要您的表单设置为enctype = "multipart/form-data"(您已经这样做了),您就可以像这样从请求中获取文件:

var file = Request.Files[0];
于 2013-02-04T17:38:37.887 回答