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

ASP.NET MVC Razor页面局部变量无法传递至控制器的问题求助

解决思路

问题核心是asp-for="@item.Id"生成的name="item.Id"不符合模型绑定的参数命名规则,导致控制器无法识别。以下是几种直接可行的解决方案:

方法一:手动指定name属性

放弃asp-for,直接手动设置隐藏输入框的name为控制器方法对应的参数名(比如控制器参数是int Id,就设name="Id"),同时用@item.Id赋值value:

@foreach (var transition in item.State.Transitions) {
    <form asp-action="@transition.TransitionName">
        <input type="hidden" name="Id" value="@item.Id" />
        <input type="submit" value="@transition.Description" class="btn btn-warning" />
    </form>
}

方法二:利用路由参数传递Id

ASP.NET MVC默认路由支持id参数,直接在form标签里通过asp-route-id传递Id,省去隐藏输入框:

@foreach (var transition in item.State.Transitions) {
    <form asp-action="@transition.TransitionName" asp-route-id="@item.Id">
        <input type="submit" value="@transition.Description" class="btn btn-warning" />
    </form>
}

这种方式下,控制器方法只需定义public IActionResult 你的动作名(int id)就能直接接收Id值。

补充说明

asp-for是基于当前视图模型的表达式生成name属性,因为item是循环里的局部变量,所以生成了item.Id这种嵌套格式的name。如果控制器对应的参数是嵌套模型(比如public class TransitionModel { public Item Item { get; set; } }),那原来的写法也能生效,但显然你当前的控制器参数是直接接收单个Id值,所以前两种方法更适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:42:04