上传文件将传递一个null对象

时间:2013-11-12 10:03:38

标签: asp.net-mvc

我有以下_CreateOrEditPartial局部视图,其中包含一个文字&文件上传: -

@model TMS.Models.DataCenter
@* This partial view defines form fields that will appear when creating and editing entities *@
@Html.AntiForgeryToken()

<div>
    <span class="f">Name </span>    
    @Html.EditorFor(model=>model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>
<div>
    <span class="f">Data Center Picture </span>    
    <input type="file" name="DataCenterfile" />
</div>

以及以下主要观点: -

@using (Html.BeginForm("Create","DataCenter", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    @Html.Partial("_CreateOrEdit", Model)
    <input type="submit" value="Create" class="btn btn-primary"/>
}

将调用以下ActionMethod: -

[HttpPost]
[ValidateAntiForgeryToken]
[CheckUserPermissions(Action = "Edit", Model = "DataCenter")]
public ActionResult Create(DataCenter dc, HttpPostedFileBase DataCenterfile)
{
    // Verify that the user selected a file
    if (DataCenterfile != null && DataCenterfile.ContentLength > 0)
    {
        // extract only the fielname
        var fileName = Path.GetFileName(DataCenterfile.FileName);
        // store the file inside ~/App_Data/uploads folder
        var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
        DataCenterfile.SaveAs(path);
    }

但是datacenterfile将始终为null ..任何人都可以建议导致此问题的原因吗? 感谢

1 个答案:

答案 0 :(得分:2)

您忘记将enctype属性添加到表单中。

这样的事情:

@using (Html.BeginForm("actionName", "controllerName", FormMethod.Post, new { enctype = "multipart/form-data" }))
{

}

关于enctype属性:What does enctype='multipart/form-data' mean?