我在努力找出我错在哪里。
我在Startup.cs配置函数中创建了一个管理角色。我添加了一个简单的网页,它可以正常工作,并显示用户列表。
@model IEnumerable<MyProject.ViewModels.Account.UserIndexViewModel>
@{
ViewData["Title"] = "UsersList";
}
<h2>Users List</h2>
<p>
<a asp-action="Create">Create New</a>
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserName)
</th>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
<a asp-action="UserDetails" asp-route-id="@item.UserName">Details</a> |
</td>
</tr>
}
</table>当我试图获取用户的详细信息时,cshtml页面正确地生成地址帐户/ UserDetails /NameSurname,并调用AccountController.cs中的AccountController.cs函数:
[HttpGet]
[Authorize(Roles = "admin")]
public IActionResult UserDetails(string userName)
{
return View();
}问题是userName不是一个字符串。我试图将参数定义为object,但在调试中看不到是哪种对象。
发布于 2016-03-22 23:38:39
我找到了解决这个问题的方法,也许不是最优雅的。我没有使用新的asp-action关键字进行调用,而是使用了老式的@Html.ActionLink:
@Html.ActionLink("Details", "UserDetails", "Account", routeValues: new { userName = item.userName })这样,就可以正确地调用AccountController中的AccountController函数,并将参数正确地路由到函数中。
发布于 2016-04-03 18:33:57
第一件事:
问题是userName不是一个字符串。我试图将参数定义为object,但在调试中看不到是哪种对象。
这是因为您使用userName作为操作参数,并且可能在id中使用默认路由,因此默认id没有映射到userName。
你有三个选择:
id -> public IActionResult UserDetails(string id)userName在Startup.cs中添加新路由
App.UseMvc(路由=> { routes.MapRoute(名称:"userdetails",模板:"Account/UserDetails/{userName?}",默认值:新的{controller=“帐户”,action="UserDetails“});routes.MapRoute(名称:”默认“,模板:"{controller=Home}/{action=Index}/{id?}");};Account/UserDetails?userName=xxx这样的链接而不是Account/UserDetails/NameSurname在我看来,1选项是一个很好的实践,因为默认路由在您的场景中已经足够了,只有当它们是真正必要的时候,才应该添加新的路由。
第二件事:
你有建筑:
https://stackoverflow.com/questions/36163274
复制相似问题