使用部分视图MVC 5上传文件

时间:2016-01-18 18:06:12

标签: c# asp.net-mvc razor asp.net-mvc-5

我试图通过我的MVC 5应用程序中的Html-Helper表单上传数字和文件。提交模型后,视图模型中的model.File属性似乎始终返回null

在添加model.File != null支票之前,我的应用程序正在抛出NullReferenceException

我的表单逻辑包含在名为UploadFile.cshtml的部分视图中,因为我的表单逻辑需要与index.cshtml不同的模型。

如何在File控制器操作中阅读表单中的[HttpPost]属性?

index.cshtml

@Html.Action("UploadFile", "Home")

UploadFile.cshtml

@model FileViewModel

@using (Html.BeginForm("FormUpload", "Home", FormMethod.Post))
{
    <div class="form-group">
        @Html.TextBoxFor(m => m.Marker)
    </div>
    <div class="form-group">
        @Html.TextBoxFor(m => m.File, new { type = "file" })
    </div>
    <input type="submit" name="submit" value="Submit" />
}

的HomeController

    public PartialViewResult UploadFile()
    {
        return PartialView("UploadFile", new FileViewModel());
    }

    // /Home/FormUpload
    [HttpPost]
    public ActionResult FormUpload(FileViewModel model)
    {
        if (ModelState.IsValid)
        {
            if (model.File != null && model.File.ContentLength > 0 && model.File.ContentType == "application/pdf")
            {
                // Convert file to byte[] and upload
                // ...
                ViewBag.Message = "File Uploaded Successfully";
            }
            else
            {
                ViewBag.Message = "File Not Uploaded";
            }
        }
        return RedirectToAction("Index");
    }

FileViewModel

public class FileViewModel
{
    public int ID { get; set; }
    public int Marker { get; set; }
    public string Filename { get; set; }
    public HttpPostedFileBase File { get; set; }
}

2 个答案:

答案 0 :(得分:3)

您缺少表单的enctype属性,您需要为文件大小写指定:

std::allocator_traits

有关详细信息,请参阅this article

答案 1 :(得分:2)

Html.BeginForm("FormUpload", "Home", FormMethod.Post))

应该是

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