首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MVC5中一个页面上载多个文件

在MVC5中一个页面上载多个文件
EN

Stack Overflow用户
提问于 2015-09-13 20:32:09
回答 3查看 1.1K关注 0票数 1

我希望允许我的用户使用不同的上传按钮上传不同的文档。

我的问题是:我有什么办法可以得到上传的文档类型吗?

考虑一个场景:我的用户可以通过点击简历上传按钮上传他们的简历,用户也可以通过点击上传求职信按钮来上传求职信。

我怎么知道上传的内容是简历还是求职信。

我在控制器里得到的只有HttpPostedFileBase[]

代码语言:javascript
运行
复制
[HttpPost]
public ActionResult Create(FormCollection collection, HttpPostedFileBase[] upload)
{
    try
    {
        // TODO: Add insert logic here

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

我发现一个与我的问题相似的问题是:Get file names from multiple files uploaded。他们所遵循的方法,是否有效?我的意思是我的页面上会有8-10个上传按钮。在Post方法中有8-10个参数看起来很奇怪。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-13 21:39:25

基本上,您有三个选项,除非您想要创建一个ViewModel类型的类来包装所有的文件。

  1. 您可以在multiple="multiple"中只使用一个文件上传按钮,并在操作中接受一个HttpPostedFileBase[] (这会阻止您区分文件)。
  2. 您可以使用具有不同名称的多个文件上载按钮,并在控制器中接受多个参数(您说过不想这样做)。
  3. 您可以使用多个文件上载按钮,适当地索引名称,并添加注释,以便知道哪个文件是哪个文件。

示例:

HTML:

代码语言:javascript
运行
复制
<input type="file" name="files[0]" /> <!-- resume -->
<input type="file" name="files[1]" /> <!-- cover letter -->
<input type="file" name="files[2]" /> <!-- whatever else -->

在你的HttpPost

代码语言:javascript
运行
复制
[HttpPost]
public ActionResult Create(HttpPostedFileBase[] files)
{
    // files[0] == resume
    // files[1] == cover letter
    // files[2] == whatever
}

我不知道为什么您不只是将文件命名为resumecoverLetter,然后在帖子中接受这些参数。就我个人而言,我认为接受多个参数是处理这类事情的最好方法--但是如果您出于某种原因不想这样做,这也不是一个糟糕的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2015-09-13 21:25:04

您可以使用属性HttpPostedFileBase.ContentType知道文件类型。

票数 0
EN

Stack Overflow用户

发布于 2015-09-13 21:33:12

您可以将每个文件上传到屏幕上的一个单独的form中。然后针对控制器上的单独动作。真的,如此之多的上传,难道不是更好地把它们分解成单独的控制器吗?您可以针对每个屏幕的许多控制器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32554263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档