You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带下拉选择的表单上传文件,文件出现在Request.Form.Keys而非Files

带下拉框的文件上传表单异常修复方案

问题根源

  1. 表单编码类型格式错误:视图里的enctype写成了"multipart / form - data",多余的空格导致浏览器无法识别正确的多部分表单编码,文件被当作普通文本字段提交,所以出现在Request.Form.Keys里,而非Files集合。
  2. 名称不匹配:视图中文件输入框的name是LoadedFile,但Controller里获取时用的是LoadFile,少了一个字母d,自然找不到对应的文件。

修复步骤

1. 修正表单enctype属性

把视图里的enctype改成标准无空格的格式:

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

2. 统一文件名称匹配

Controller里把获取文件的名称改成和视图一致的LoadedFile:

var file = Request.Form.Files["LoadedFile"];

3. 更简洁的参数绑定(可选)

不用手动从Request里取,直接通过Controller参数接收文件,符合ASP.NET Core的最佳实践:

public IActionResult UploadForm(ViewModel model, IFormFile LoadedFile)
{
    uView = model;
    try
    {
        Stream? data = null;
        if (LoadedFile != null && LoadedFile.Length > 0)
        {
            uView.Filename = LoadedFile.FileName;
            data = LoadedFile.OpenReadStream();
        }
        uView.Workbook = new XLWorkbook(data);
    }
    catch (Exception ex)
    {
        // 捕获并记录错误信息
    }
    return View(uView); // 记得返回视图或对应结果
}

4. 绑定到ViewModel(可选)

如果想让文件直接绑定到ViewModel,给ViewModel加个IFormFile属性:

public class ViewModel
{
    public string Selection { get; set; }
    public string Filename { get; set; }
    public XLWorkbook? Workbook { get; set; }
    public IFormFile? LoadedFile { get; set; } // 添加这个属性
}

然后Controller直接用ViewModel接收,代码更简洁:

public IActionResult UploadForm(ViewModel model)
{
    uView = model;
    try
    {
        Stream? data = null;
        if (model.LoadedFile != null && model.LoadedFile.Length > 0)
        {
            uView.Filename = model.LoadedFile.FileName;
            data = model.LoadedFile.OpenReadStream();
        }
        uView.Workbook = new XLWorkbook(data);
    }
    catch (Exception ex)
    {
        // 捕获并记录错误信息
    }
    return View(uView);
}

内容的提问来源于stack exchange,提问作者Micah Stovall

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:42:48