为什么 asp 路由传递后值"0"



在表单中的剃刀页面中,我有一个按钮,它在提交时调用带有参数"int id"的方法"OnPostEditMe":

@{ 
var idbook = @Html.DisplayFor(a => a.EditBook.Id);
//idbook on page load gets id number of object EditBook when page loads, this works, if I add this value anywhere in razor page it displays correctly 
}
<form method="post">
<div class="form-group row">
<div class="col-3 offset-3">
<button asp-page-handler="EditMe" asp-route-id="@idbook" type="submit"> 
Update @idbook
</button>  
</div>
</div>
</form>

但当我点击这个按钮时,它调用方法OnPostEditMe,但使用参数"0"代替了用"idbook"加载的值:

public async Task<IActionResult> OnPostEditMe(int id)
{
var tmp = id; //id is always 0
...
}

怎么了,为什么asp路由id="@idbook"没有传递页面上加载的参数?

您必须在form而不是按钮上进行设置

<form method="post" asp-route-id="@idbook">

或者你可以使用隐藏输入

<input value="@idbook" name="id" id="id" type="hidden"/>.

最新更新