【问题标题】:asp-route in table row not passing id表行中的 asp-route 未传递 id
【发布时间】:2019-09-27 18:39:40
【问题描述】:

在标签中使用它时,asp-route 似乎没有正确地将 Id 发送到我的视图方法。 id 作为“null”传入。 当我将它与 a 标签一起使用时,它可以正常工作(除非它不打开模式);但是,我想让整行都可以点击编辑。

我试图检查外壳以确保它不是愚蠢的;但是,当将相同的代码粘贴到标签中时,它有 0 个问题。当我查看控制台时,我可以看到 asp-route-id 正在提取正确的 id。它到达控制器,并通过 if(user == null),因为它以 null 的形式出现。

HTML:


    @model PortalDev.Models.ApplicationUser

    <tr data-toggle="ajax-modal" data-target="#editUser" data-url="@Url.Action("EditUser")" asp-action="EditUser" asp-controller="Administration" asp-route-id="@Model.Id">
        <td class="text-left">@Model.Id</td>
        <td class="text-left">@Model.UserName</td>
        <td class="text-left">@Model.Email>
        <td class="text-left">@Model.PhoneNumber</td>
        <td class="text-left">@Model.City</td>
        <td>
            <button type="button" id="btnOpen" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#SendEmail">
                <i class="glyphicon glyphicon-envelope"></i>
            </button>
            <a asp-action="EditUser" asp-controller="Administration" asp-route-id="@Model.Id">Edit</a>
        </td>
    </tr>

控制器:


        [HttpGet]
        public async Task<IActionResult> EditUser(string id)
        {
            var user = await userManager.FindByIdAsync(id);
            if (user == null)
            {
                ViewBag.ErrorMessage = $"User with Id = {id} cannot be found";
                return View("NotFound");
            }

            var userClaims = await userManager.GetClaimsAsync(user);
            var userRoles = await userManager.GetRolesAsync(user);

            var model = new EditUserViewModel
            {
                Id = user.Id,
                Email = user.Email,
                UserName = user.UserName,
                City = user.City,
                Claims = userClaims.Select(c => c.Value).ToList(),
                Roles = userRoles
            };
            return PartialView("~/Views/Modals/_EditUserModalPartial.cshtml", model);
        }

预期的行为是点击表格行,它会弹出一个带有 EditUserViewModel 的模式

【问题讨论】:

  • Id 实际上是 string(而不是 int)吗?将方法更改为EditUser([FromRoute] string id) 是否有效?
  • @crgolden 是的,它实际上是一个字符串,它类似于 GUID,但有一种字符串类型。它唯一有效的时候是我在前端做一个标签。我尝试过的所有其他方法都不起作用(包括 [FromRoute])。

标签: c# entity-framework asp.net-core razor


【解决方案1】:

将data-url="@Url.Action("EditUser")" 替换为data-url="@Url.Action("EditUser", new {Id = Model.Id})"。这将生成正确的 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多