我有一个简单的模型,带有一个字符串属性,我在一个简单的视图上渲染它.

视图如下所示:

@using (Html.BeginForm("UploadFile", "Home", FormMethod.Post, new { encType="multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.FirstName)
    <br /><br />

    <input type="file" name="fileUpload" /><br /><br />
    <input type="submit" value="submit me" name="submitme" id="submitme" />
}

控制器是这样的:

[HttpPost]
public ActionResult UploadFile(UploadFileModel model, HttpPostedFileBase file)
{
   // DO Stuff
   return View(model);
}

现在,当我提交时,确实填充了模型,但是第二个参数HttpPostedFileBase为空.但是,在执行Request.Files时-它似乎确实显示正在发布的请求中有一个文件. 我如何才能真正获得要绑定的第二个参数呢?

推荐答案

为什么不像这样将上传的文件添加到模型中:

public class UploadFileModel 
{
    public UploadFileModel()
    {
        Files = new List<HttpPostedFileBase>();
    }

    public List<HttpPostedFileBase> Files { get; set; }
    public string FirstName { get; set; }
    // Rest of model details
}

然后将你的观点改为:

@using (Html.BeginForm("UploadFile", "Home", FormMethod.Post, new { encType="multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.FirstName)
    <br /><br />

    @Html.TextBoxFor(m => m.Files, new { type = "file", name = "Files" })<br /><br />
    <input type="submit" value="submit me" name="submitme" id="submitme" />
}

然后,您的文件将按如下方式发回:

public ActionResult UploadFile(UploadFileModel model)
{
    var file = model.Files[0];
    return View(model);
}

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

由于 Blazor Change Detection API,组件重新渲染被跳过.如何避免?

*不*使用 asp.net 会员提供程序是个坏主意吗?

ASP.NET GridView 第二个标题行跨越主标题行

如何在 IISExpress 上使用带有 localhost 的子域?

在构建时自动停止/重新启动 ASP.NET 开发服务器

区分开发、登台和生产环境之间的 web.config

无法从 App_code 文件夹中找到类型或命名空间

这两种方法有什么区别?

N' 在 SQL 脚本中代表什么? (插入脚本中字符之前使用的那个)

您对 Windows Workflow Foundation 有何体验?

ASP.Net:在共享/静态函数中使用 System.Web.UI.Control.ResolveUrl()

ASP.NET 上的 WebSockets 教程

使用 ASP.NET Web API 对 PUT 和 DELETE 的 CORS 支持

从 IFrame 重定向父页面

如何在 ASP.net 中使用 wkhtmltopdf.exe

如何在我自己的方法中模仿 string.Format()?

MVC3 值 Ajax 文件上传

如何将我的 Autofac 容器插入 ASP. NET 身份 2.1

Visual Studio 2013 ASP.NET 项目中 Antlr 包的用途是什么?