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

ASP.NET MVC 5集成DropZone时无法向控制器传递额外参数问题求助

解决方案

第一步:修正隐藏表单字段的name属性

你当前的隐藏输入框没有指定name属性,表单提交时ASP.NET Core框架无法识别为请求参数,按如下修改:

<!-- 仅传Id的写法 -->
<input type="hidden" name="Id" value="@Model.Id" />
<!-- 要传递完整NewProductVM模型的话,按属性名逐个添加对应隐藏字段即可 -->
<input type="hidden" name="ProductName" value="@Model.ProductName" />
<input type="hidden" name="Price" value="@Model.Price" />
<!-- 其他属性以此类推 -->

第二步:配置Dropzone携带额外表单参数

Dropzone默认提交文件时不会自动携带外层表单的非文件字段,你需要在Images视图末尾添加Scripts区块配置Dropzone参数:

@section Scripts{
    <script>
        Dropzone.options.uploader = {
            // 提交文件时自动携带外层form的所有表单字段
            params: $('#form2').serializeArray(),
            // 按需添加上传完成后的回调逻辑
            success: function(file, response){
                // 若需要上传完成后跳转,可在此处添加页面跳转逻辑
                // window.location.href = '/Products/Index';
            }
        };
    </script>
}

第三步:调整控制器接收逻辑(按需二选一即可)

选项1:单独接收Id参数

保持现有控制器方法签名不变,完成前两步配置后即可正常获取到Id的值。

选项2:直接接收完整NewProductVM模型

修改控制器方法签名,框架会自动匹配提交的字段填充模型:

[HttpPost]
public async Task<IActionResult> UploadFiles(NewProductVM model)
{
    // 直接使用model.Id、model.ProductName等属性即可
    // 原有上传、存储逻辑保持不变
}

补充说明

你之前使用asp-route-id="@Model.Id"得到0的原因是Dropzone默认不会读取DOM上的asp-route属性作为请求参数,使用上述表单字段+Dropzone参数配置的方案兼容性更高,无需额外适配路由规则。

内容的提问来源于stack exchange,提问作者David.Warwick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:03