Asp.net mvc BeginForm html helper不';无法使用文件上载

Asp.net mvc BeginForm html helper不';无法使用文件上载,asp.net-mvc,file-upload,Asp.net Mvc,File Upload,我有一个强类型视图、一个模型和一个简单的post方法 模型有一个属性: public HttpPostedFileBase File { get; set; } 视图如下所示: <form method="post" enctype="multipart/form-data"> <input type="submit" name="Put" value="Excel" /> </form> 我刚才展示的效果很好。但当我将显式表单声明更改为以

我有一个强类型视图、一个模型和一个简单的post方法

模型有一个属性:

public HttpPostedFileBase File { get; set; }
视图如下所示:

<form method="post" enctype="multipart/form-data">
        <input type="submit" name="Put" value="Excel" />
</form>
我刚才展示的效果很好。但当我将显式表单声明更改为以下代码时:

@using (Html.BeginForm(MVC.SomeController.Actions.ActionNames.Method, MVC.SomeController.Name))
那么action方法不会将文件绑定到模型


有人知道原因吗?

因为您没有在表单中添加
enctype
属性:

@using (Html.BeginForm(MVC.SomeController.Actions.ActionNames.Method,
        MVC.SomeController.Name,
        FormMethod.Post,
        new { enctype = "multipart/form-data" }))
{
    ...
}

使用
Html.BeginForm
时,它会忽略
enctype
属性,对于文件附件,该属性必须是
multipart/form data

使用允许设置如下属性的
BeginForm
重载:

@using (Html.BeginForm(MVC.SomeController.Actions.ActionNames.Method, MVC.SomeController.Name, FormMethod.Post, new { enctype = "multipart/form-data" }))
@using (Html.BeginForm(MVC.SomeController.Actions.ActionNames.Method, MVC.SomeController.Name, FormMethod.Post, new { enctype = "multipart/form-data" }))