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
相关产品推荐
相关产品推荐

