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>
}
干杯,谢谢。
除此之外,还有无数其他问题与"如何上传此文件。我一直得到空"。我目前的解决方法似乎是一个流行的答案。
你查看的事实@Html.TextBoxFor(m => m.FormUpload.File, new { type = "file" })
意味着视图中的模型不是UploadViewModel
,而是一个包含名为 FormUpload
的属性的模型,该属性的类型为 UploadViewModel
。
它不会绑定的原因是UploadViewModel
不包含名为 FormUpload
的属性,而该属性又包含名为 File
的属性。
您需要
-
更改 POST 方法中的参数以使用与例如,在视图中声明,如果其
@model MyModel
则方法需要public ActionResult Upload(MyModel model)
,或者 -
有效地使用
BindAttribute
的Prefix
属性绑定时去除前缀 -public ActionResult Upload([Bind(Prefix="FormUpload")]UploadViewModel model)