为什么asp-route-id在我的表单帖子中不起作用?

时间:2017-03-13 18:13:03

标签: asp.net-mvc asp.net-core tag-helpers

我在一个实例中使用asp-route-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));

此方法接收正确的ID。

下一个示例在表单标记中具有路径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>

我想在这里收到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);
    }

但在这种情况下,参数将为空。

它应该来自from标签。我从Adam Freemans APress MVC核心书中的第一个身份章节得到了这个,当我输入该例子时它就起作用了。

2 个答案:

答案 0 :(得分:2)

您必须将asp-route-id更改为asp-route-Id,因为必须在“ asp-router-”之后加上要发送到该方法的参数名称。

答案 1 :(得分:1)

我检查了表格标签以回应junnas&#39;评价。

看起来像这样:

<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>

注意额外的形成=&#34; /帐户/删除&#34;&gt;除了表单操作之外,还在按钮上。

我有一个额外的asp-route-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>

并按下这样的按钮:

是 - 删除此用户