Asp.net mvc 为什么asp路由id在我的表单帖子中不起作用?

Asp.net mvc 为什么asp路由id在我的表单帖子中不起作用?,asp.net-mvc,asp.net-core,tag-helpers,Asp.net Mvc,Asp.net Core,Tag Helpers,我在一个实例中使用asp路由id: 它从锚定标记开始工作,如下所示: <a id="editModal" data-toggle="modal" data-target="#modal_box" class="btn btn-sm btn-primary" asp-action="Edit" asp-route-id="@user.Id">Edit</a> public async Task<PartialViewResult> Delete

我在一个实例中使用asp路由id:

它从锚定标记开始工作,如下所示:

<a id="editModal" data-toggle="modal" data-target="#modal_box"
    class="btn btn-sm btn-primary"
    asp-action="Edit" asp-route-id="@user.Id">Edit</a>
public async Task<PartialViewResult> DeleteConfirm(string Id) =>
        PartialView("_DeleteConfirm", await _userManager.FindByIdAsync(Id));
<div class="modal-footer">
    <form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post">
        <button type="submit" class="btn btn-primary"
           asp-action="Delete">Yes - Delete this User</button>
        <a asp-action="Index" class="btn btn-default">Cancel</a>
    </form>
</div>
<form method="post" action="/Account/Delete/5066a97b-7eb4-4e1d-889b-3f3450adc1d6">
        <button type="submit" class="btn btn-primary" formaction="/Account/Delete">Yes - Delete this User</button>
        <a class="btn btn-default" href="/Account">Cancel</a>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8At6yzynfgJHstUkF5jJTYgHHX0on9ajBa9NfD60YGbM7aRhKjDQUGkh4gPAMkwwOsnqUtDxSx87MnUvbxcefB7tGX1v0Xi38h_SoL_iakiFdJSpUbymp4tsr-cMFNK3kwYx7o42OumLkFbvFn1Nyun_8LDc0mmOvGN5LeeHiIq84cSJCaaiyR_2talw6Dpcvw" /></form>
编辑
收到的答复如下:

<a id="editModal" data-toggle="modal" data-target="#modal_box"
    class="btn btn-sm btn-primary"
    asp-action="Edit" asp-route-id="@user.Id">Edit</a>
public async Task<PartialViewResult> DeleteConfirm(string Id) =>
        PartialView("_DeleteConfirm", await _userManager.FindByIdAsync(Id));
<div class="modal-footer">
    <form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post">
        <button type="submit" class="btn btn-primary"
           asp-action="Delete">Yes - Delete this User</button>
        <a asp-action="Index" class="btn btn-default">Cancel</a>
    </form>
</div>
<form method="post" action="/Account/Delete/5066a97b-7eb4-4e1d-889b-3f3450adc1d6">
        <button type="submit" class="btn btn-primary" formaction="/Account/Delete">Yes - Delete this User</button>
        <a class="btn btn-default" href="/Account">Cancel</a>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8At6yzynfgJHstUkF5jJTYgHHX0on9ajBa9NfD60YGbM7aRhKjDQUGkh4gPAMkwwOsnqUtDxSx87MnUvbxcefB7tGX1v0Xi38h_SoL_iakiFdJSpUbymp4tsr-cMFNK3kwYx7o42OumLkFbvFn1Nyun_8LDc0mmOvGN5LeeHiIq84cSJCaaiyR_2talw6Dpcvw" /></form>
公共异步任务DeleteConfirm(字符串Id)=>
PartialView(“_DeleteConfirm”,wait_userManager.FindByIdAsync(Id));
此方法接收正确的id

下一个示例的表单标记中包含路由id,如下所示:

<a id="editModal" data-toggle="modal" data-target="#modal_box"
    class="btn btn-sm btn-primary"
    asp-action="Edit" asp-route-id="@user.Id">Edit</a>
public async Task<PartialViewResult> DeleteConfirm(string Id) =>
        PartialView("_DeleteConfirm", await _userManager.FindByIdAsync(Id));
<div class="modal-footer">
    <form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post">
        <button type="submit" class="btn btn-primary"
           asp-action="Delete">Yes - Delete this User</button>
        <a asp-action="Index" class="btn btn-default">Cancel</a>
    </form>
</div>
<form method="post" action="/Account/Delete/5066a97b-7eb4-4e1d-889b-3f3450adc1d6">
        <button type="submit" class="btn btn-primary" formaction="/Account/Delete">Yes - Delete this User</button>
        <a class="btn btn-default" href="/Account">Cancel</a>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8At6yzynfgJHstUkF5jJTYgHHX0on9ajBa9NfD60YGbM7aRhKjDQUGkh4gPAMkwwOsnqUtDxSx87MnUvbxcefB7tGX1v0Xi38h_SoL_iakiFdJSpUbymp4tsr-cMFNK3kwYx7o42OumLkFbvFn1Nyun_8LDc0mmOvGN5LeeHiIq84cSJCaaiyR_2talw6Dpcvw" /></form>

是-删除此用户
取消
我正在这里尝试接收Id:

    [HttpPost]
    public async Task<IActionResult> Delete(string Id)
    {
        AppUser user = await _userManager.FindByIdAsync(Id);
        if (user != null)
        {
            IdentityResult result = await _userManager.DeleteAsync(user);
            if (result.Succeeded)
            {
                return RedirectToAction("Index");
            }
            else
            {
                AddErrorsFromResult(result);
            }
        }
        else
        {
            ModelState.AddModelError("", "User Not Found");
        }
        return View("Index", _userManager.Users);
    }
[HttpPost]
公共异步任务删除(字符串Id)
{
AppUser=await\u userManager.FindByIdAsync(Id);
如果(用户!=null)
{
IdentityResult result=wait_userManager.deleteAncy(用户);
if(result.successed)
{
返回操作(“索引”);
}
其他的
{
AddErrorsFromResult(结果);
}
}
其他的
{
AddModelError(“,”未找到用户“);
}
返回视图(“索引”,\u userManager.Users);
}
但在本例中,参数为null


它应该从from标记开始工作。我从Adam Freemans的一本Press MVC Core书的第一章中得到了这一点,当我在这个例子中输入它时,它起了作用。

我检查了表单标签以回应junnas的评论

看起来是这样的:

<a id="editModal" data-toggle="modal" data-target="#modal_box"
    class="btn btn-sm btn-primary"
    asp-action="Edit" asp-route-id="@user.Id">Edit</a>
public async Task<PartialViewResult> DeleteConfirm(string Id) =>
        PartialView("_DeleteConfirm", await _userManager.FindByIdAsync(Id));
<div class="modal-footer">
    <form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post">
        <button type="submit" class="btn btn-primary"
           asp-action="Delete">Yes - Delete this User</button>
        <a asp-action="Index" class="btn btn-default">Cancel</a>
    </form>
</div>
<form method="post" action="/Account/Delete/5066a97b-7eb4-4e1d-889b-3f3450adc1d6">
        <button type="submit" class="btn btn-primary" formaction="/Account/Delete">Yes - Delete this User</button>
        <a class="btn btn-default" href="/Account">Cancel</a>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8At6yzynfgJHstUkF5jJTYgHHX0on9ajBa9NfD60YGbM7aRhKjDQUGkh4gPAMkwwOsnqUtDxSx87MnUvbxcefB7tGX1v0Xi38h_SoL_iakiFdJSpUbymp4tsr-cMFNK3kwYx7o42OumLkFbvFn1Nyun_8LDc0mmOvGN5LeeHiIq84cSJCaaiyR_2talw6Dpcvw" /></form>

是-删除此用户
注意除了表单操作之外,按钮右侧还有额外的表单操作=“/Account/Delete”>

我有一个额外的asp路由id遗留在一个按钮上,我从一个锚更改过来

我必须在这里把它从按钮上取下来:

<form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post">
        <button asp-route-id="@Model.Id" type="submit" class="btn btn-primary">Yes - Delete this User</button>
        <a asp-action="Index" class="btn btn-default">Cancel</a>
    </form>

是-删除此用户
取消
把按钮做成这样:

<a id="editModal" data-toggle="modal" data-target="#modal_box"
    class="btn btn-sm btn-primary"
    asp-action="Edit" asp-route-id="@user.Id">Edit</a>
public async Task<PartialViewResult> DeleteConfirm(string Id) =>
        PartialView("_DeleteConfirm", await _userManager.FindByIdAsync(Id));
<div class="modal-footer">
    <form asp-controller="Account" asp-action="Delete" asp-route-id="@Model.Id" method="post">
        <button type="submit" class="btn btn-primary"
           asp-action="Delete">Yes - Delete this User</button>
        <a asp-action="Index" class="btn btn-default">Cancel</a>
    </form>
</div>
<form method="post" action="/Account/Delete/5066a97b-7eb4-4e1d-889b-3f3450adc1d6">
        <button type="submit" class="btn btn-primary" formaction="/Account/Delete">Yes - Delete this User</button>
        <a class="btn btn-default" href="/Account">Cancel</a>
    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8At6yzynfgJHstUkF5jJTYgHHX0on9ajBa9NfD60YGbM7aRhKjDQUGkh4gPAMkwwOsnqUtDxSx87MnUvbxcefB7tGX1v0Xi38h_SoL_iakiFdJSpUbymp4tsr-cMFNK3kwYx7o42OumLkFbvFn1Nyun_8LDc0mmOvGN5LeeHiIq84cSJCaaiyR_2talw6Dpcvw" /></form>

是-删除此用户

您必须将
asp路由id
更改为
asp路由id
,因为在“
asp路由器-
”之后,您必须将要发送到该方法的参数的名称放进去。

您是否检查了在HTML中生成的表单?存在的操作URL错误或模型绑定不起作用。通常,该参数将被称为
id
,而不是
id
。很好的命名约定调用。谢谢但仍在努力修复。