我有一个强类型视图、一个模型和一个简单的post方法。
模型有一个属性:
public HttpPostedFileBase File { get; set; }
视图如下:
<form method="post" enctype="multipart/form-data">
<input type="submit" name="Put" value="Excel" />
</form>
一个动作是
[HttpPost]
public virtual ActionResult Method(ModelVM model)
{
...
}
我刚才展示的东西很管用。但是,当我将显式表单声明更改为以下代码时:
@using (Html.BeginForm(MVC.SomeController.Actions.ActionNames.Method, MVC.SomeController.Name))
然后操作方法不将文件绑定到模型。
有人知道为什么吗?
因为您还没有将enctype
属性添加到表单中:
@using (Html.BeginForm(MVC.SomeController.Actions.ActionNames.Method,
MVC.SomeController.Name,
FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
...
}
使用Html.BeginForm
时,会省略文件附件必须为multipart/form-data
的enctype
属性。
使用BeginForm
的重载,允许设置如下属性:
@using (Html.BeginForm(MVC.SomeController.Actions.ActionNames.Method, MVC.SomeController.Name, FormMethod.Post, new { enctype = "multipart/form-data" }))