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

如何通过Bootstrap Modal将用户选中的图片上传到Controller方法

问题核心原因

  • 浏览器出于安全限制,$('#i_image').val()只能获取到伪装的C:\fakepath\xxx路径,无法拿到实际的文件二进制内容
  • application/json格式不支持传输二进制文件,你之前的提交方式本身就无法传递文件
  • 参数名不匹配也会导致控制器无法正确绑定接收到的文件

解决步骤

  1. 修改前端提交脚本,使用FormData对象包装所有表单数据(含文件和防伪令牌):
$(document).ready(function () {
    $('#btn_submit').click(function (e) {
        e.preventDefault();
        // 直接基于现有表单生成FormData,自动包含所有表单字段、防伪令牌、选中的文件
        var formData = new FormData($('#form_firm_data')[0]);
        // 有额外自定义参数可手动追加:formData.append('参数名', '参数值')

        $.ajax({
            type: "POST",
            url: "/FirmModels/Create",
            data: formData,
            processData: false, // 禁止jQuery处理FormData
            contentType: false, // 禁止jQuery设置请求头,浏览器会自动生成带分隔符的multipart/form-data请求头
            dataType: 'json',
            success: function (response) {
                if (response.success) {
                    console.log(response.responseText);
                }
            },
            error: function (response) {
                alert("failed...");
            }
        })
        return false;
    })
})
  1. 匹配参数绑定规则,二选一即可:
  • 把文件输入框的name属性修改为和控制器接收参数名一致:
    <input type="file" class="form-control" id="i_image" required name="n_image" accept="image/*">
    
  • 或者手动把文件追加到FormData中,不需要修改input的name:
    // 生成FormData后加一行即可
    formData.append('n_image', $('#i_image')[0].files[0]);
    

补充说明

如果你的CompanyModel模型中已经定义了HttpPostedFileBase类型的属性,直接把文件输入框的name设置为对应属性名即可,控制器方法不需要额外加n_image参数,ASP.NET MVC会自动把文件绑定到模型对应的属性上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:06:02