如何正确从View向Controller传递参数?editId始终为0的问题
ASP.NET Core 参数传递问题解决
问题原因
你当前的按钮写法中,asp-for与button的value属性组合不符合ASP.NET Core Tag Helper的预期,导致提交时editId参数无法正确传递到Controller。
解决方案
以下两种方法都能解决问题:
方法一:使用路由参数传递(推荐)
直接用asp-route-editId指定参数值,Tag Helper会自动生成包含参数的提交地址:
<button class="card-link" asp-action="Edit" type="submit" asp-route-editId="@cc.Id"> Id: @cc.Id </button>
方法二:通过表单隐藏域传递
将参数放在隐藏输入框中,按钮仅负责触发表单提交:
<form asp-action="Edit" method="post"> <input type="hidden" name="editId" value="@cc.Id" /> <button class="card-link" type="submit"> Id: @cc.Id </button> </form>
补充说明
- Controller的
[HttpPost]方法接收参数时,要么通过路由参数(对应asp-route-*),要么通过表单字段(对应input元素),按钮的value属性默认不会被作为表单参数提交。 - 两种方法都能保证
@cc.Id的值正确传递到Controller的editId参数中,避免出现始终为0的问题。
内容的提问来源于stack exchange,提问作者Zufar
相关产品推荐
相关产品推荐

