我试图通过点击视图中的链接来降低用户的角色。
当我点击链接时,它没有进入操作,但它只是给出了404错误并将未找到的资源链接到我试图传递给操作的字符串(称为“stringparameter”) )
在这种情况下,链接是/ Admin / Disable / stringparameter
我认为我没有使用正确的超载,所以有人可以帮助我吗? 感谢
这是AdminController中的操作
[HttpPost]
public ActionResult Disable(string id)
{
Role rol = new UserRepository().GetRole("Disabled");
new UserRepository().UpdateUser(id,rol.RoleId);
return RedirectToAction("Users");
}
这是viewmodel
public class UserSuperUserPM
{
public UserClass User { get; set; }
public List<UserClass> Users { get; set; }
public UserClass SuperUser { get; set; }
public List<UserClass> SuperUsers { get; set; }
public UserClass Disabled { get; set; }
public List<UserClass> Disableds { get; set; }
public UserClass Inactive { get; set; }
public List<UserClass> Inactives { get; set; }
}
这是用户类
public class UserClass
{
public string UserId { get; set; }
public string Username { get; set; }
public string Role { get; set; }
}
这是视图(视图中4个类似表中的1个)
@foreach (var item in Model.Users)
{
<tr>
<td class="col-md-4">
@Html.DisplayFor(modelItem => item.Username, Model.Users)
</td>
<td class="col-md-4">
@Html.DisplayFor(modelItem => item.Role, Model.Users)
</td>
<td calss="col-md-4">
--------Commented attempted links(none of them work correct)
@*@Html.ActionLink("Disable", "Disable", new { Controller = "Admin", action = "Disable", id = item.UserId })*@
@*<a href="~/Controllers/AdminController/Disable?id=@item.UserId">Disable</a>*@
@*@Html.ActionLink("Disable","Admin", new { id = item.UserId },null)*@
@*@Html.ActionLink("Disable", "Disable","Admin", item.UserId)*@
-------original attempted link
@Html.ActionLink("Disable", "Disable", new { id = item.UserId})
</td>
</tr>
}
答案 0 :(得分:2)
这是因为href
元素中的a
attr只执行GET
dont POST
,所以要将其更改为:
[HttpGet]
public ActionResult Disable(string id)
{
Role rol = new UserRepository().GetRole("Disabled");
new UserRepository().UpdateUser(id,rol.RoleId);
return RedirectToAction("Users");
}
但我建议你用JS做这件事。
答案 1 :(得分:1)
只要删除[HttpPost]它就说这个控制器只能通过POST方法访问你试图通过GET访问,你应该让它发布并用AJAx进行调用