将文件从View发布到Controller

时间:2012-11-27 17:58:15

标签: asp.net asp.net-mvc file post

我在视图中有以下代码:

<div>
  <input type="file" name ="file" onchange="location.href='<%: Url.Action("ChangeImage", new{Id = Model.Id}) %>'" />
</div>

在Controller中我有ChangeImage方法:

  public ActionResult ChangeImage(FormCollection collection, int Id,Products products)
    {
        var file = Request.Files["file"];

        //Do something
    }

但是所选文件不会发布到控制器。问题是什么?如何将文件内容发送到控制器以使用它?

1 个答案:

答案 0 :(得分:1)

因为您没有发布表单数据可能是原因。

在创建用于提交文件的MVC表单时,您必须指定“enctype”,您可以使用帮助程序执行此操作:

@using (Html.BeginForm("MyAction", "MyController", new { @Id = Model.Id }, FormMethod.Post, new { name = "Form", enctype = "multipart/form-data" }))
{
    //all form fields code in here
}

然后你会想要改变你的javascript来发布表单,例如:

document.forms[0].submit();//assuming you only have one form

此外,您的操作参数似乎与任何内容都不匹配。具体为ShopIDproducts。您可能会收到错误,因为您没有默认值。尽管如此,我并不是100%肯定。或者也许你已经在表单的其他部分,所以它可能没问题