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

控制器AndraStatus方法无法接收视图传递的orderId问题求助

问题分析与解决方案

核心原因是HTML规范不允许表单嵌套,你的视图中外层已定义了指向AndraStatus方法的表单,但内部又嵌套了另一个表单。浏览器会自动修正这种无效的DOM结构,导致实际提交的是内层表单——而内层表单既没有指定目标action,也未包含nyStatus参数,同时外层表单的配置被完全忽略,最终造成orderId无法正确传递到控制器。

修复步骤

1. 移除表单嵌套,合并提交逻辑

删除内层的<form>标签,将隐藏域和提交按钮直接放到外层表单内部,确保所有需要提交的字段都在同一个合法表单中:

@if (User.Identity.IsAuthenticated)
{
    <form asp-controller="Order" asp-action="AndraStatus" method="post">
        <div class="form-group">
            <label for="nyStatus">Välj ny status:</label>
            <select class="form-control" id="nyStatus" name="nyStatus">
                @foreach (var status in Enum.GetValues(typeof(OrderStatus)))
                {
                    <option value="@status">@status</option>
                }
            </select>
        </div>
        <input type="hidden" name="orderId" value="@order.Id">
        <button type="submit" class="btn btn-primary">Uppdatera status</button>
    </form>
}

2. 验证参数绑定一致性

确认表单字段的name属性与控制器方法的参数名称完全匹配:

  • 隐藏域name="orderId" ↔ 控制器参数int orderId
  • 下拉框name="nyStatus" ↔ 控制器参数OrderStatus nyStatus

当前控制器代码的参数命名是匹配的,ASP.NET Core会自动完成绑定,无需额外修改。

3. 额外验证点

  • 临时在视图中输出@order.Id,确认渲染后的HTML里隐藏域的value属性是否为预期的订单ID值;
  • 提交表单时,打开浏览器开发者工具的网络面板,检查请求的Form Data中是否包含orderId和nyStatus两个参数,以此确认表单数据是否正确发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:42:39