MVC5 上传文件请求.文件在控制器方法参数不起作用的地方工作

本文关键字:文件 不起作用 参数 地方工作 方法 请求 MVC5 控制器 | 更新日期: 2023-09-27 18:36:42

我正在使用一个简单的表单上传文件。我遇到的问题是控制器被赋予一个视图模型作为其唯一的参数(该表单基于此视图模型)。当我尝试通过视图模型参数访问已发布的文件时,它null.但是,当我使用Request.Files["FormUpload.File"]访问文件时,我能够访问发布的文件。

我知道实际上表单附加了一个我可以访问的 id FormUpload.File。我不明白的是如何使用视图模型来访问文件。我的控制器参数是否正确?

我在下面放了相关的代码。任何解释将不胜感激。

上传视图视图模型:

public class UploadViewModel : ListViewModel
{
    public HttpPostedFileBase File { get; set; }
}

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Upload(UploadViewModel model)
{
    HttpPostedFileBase requestFile = Request.Files["FormUpload.File"];
    // Reference to View Model File
    // model.File = null
    // Reference to Request.Files
    // requestFile = true
}

视图(考虑 FormUpload 是 UploadView 视图模型的一个实例):

@using (Html.BeginForm("Upload", "RelevantController" , new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <fieldset>
        <legend>Upload a file.</legend>
        @Html.TextBoxFor(m => m.FormUpload.File, new { type = "file" })
        <input type="submit" name="Submit" id="Submit" value="Create" class="btn btn-default" />
    </fieldset>
}

干杯,谢谢。

除此之外,还有无数其他问题与"如何上传此文件。我一直得到空"。我目前的解决方法似乎是一个流行的答案。

MVC5 上传文件请求.文件在控制器方法参数不起作用的地方工作

你查看的事实@Html.TextBoxFor(m => m.FormUpload.File, new { type = "file" })意味着视图中的模型不是UploadViewModel,而是一个包含名为 FormUpload 的属性的模型,该属性的类型为 UploadViewModel

它不会绑定的原因是UploadViewModel不包含名为 FormUpload 的属性,而该属性又包含名为 File 的属性。

您需要

  1. 更改 POST 方法中的参数以使用与例如,在视图中声明,如果其@model MyModel则方法需要public ActionResult Upload(MyModel model),或者

  2. 有效地使用BindAttributePrefix属性绑定时去除前缀 - public ActionResult Upload([Bind(Prefix="FormUpload")]UploadViewModel model)