【发布时间】: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