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

ASP.NET MVC上传JSON文件时Controller接收的参数始终为null如何解决

问题排查及解决方案

核心问题1:表单元素未放在Form块内

你当前的代码结构中,Html.BeginForm对应的{ }块为空,所有文件上传控件、提交按钮都写在表单标签外部,提交操作只会携带表单块内部的元素内容,外部控件的内容不会被提交到后端,导致参数为空。
修改方式:将所有需要提交的元素全部放入@using (Html.BeginForm()){ }的花括号内部。

核心问题2:Html.BeginForm重载使用错误,enctype属性未生效

你当前调用Html.BeginForm的参数传递逻辑错误,你把htmlAttributes配置放到了routeValues的参数位置,导致表单最终没有渲染enctype="multipart/form-data"这个文件上传必须的属性,浏览器不会按文件上传的格式提交数据。
正确的表单写法如下:

@using (Html.BeginForm("Create", "你的实际控制器名称", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <h3>OR</h3><br>
    @Html.TextBox("jsonFile", null, new { type = "file" })

    <div class="col-md-offset-2 col-md-10 ">
        <input type="submit" value="Create" class="btn btn-default submit-button" />
    </div>
}

其他优化与注意事项

  • 你当前后端的HttpPostedFileBase参数名jsonFile和前端文件输入框的name属性完全匹配,这部分无需修改
  • 不要在ASP.NET MVC控制器中使用MessageBox.Show,这是WinForm的桌面端API,在Web服务端运行会抛出异常,建议改用日志记录、返回前端提示信息的方式做状态反馈
  • 读取JSON文件内容时建议使用ReadToEnd()代替ReadLine(),避免JSON内容存在换行时只读取到部分内容,示例代码如下:
if (jsonFile != null && jsonFile.ContentLength > 0)
{
    using (StreamReader jsonReader = new StreamReader(jsonFile.InputStream, Encoding.UTF8))
    {
        string fullJsonContent = jsonReader.ReadToEnd();
        // 后续业务处理逻辑
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:54:03