为什么 asp-路由传递 post 值“0”

Why is asp-route passing on post value "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-route-id="@idbook" 没有传递页面上加载的参数?

您必须在 form 而不是按钮

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

或者你可以使用隐藏输入

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