从查看

时间:2015-12-30 23:00:35

标签: c# asp.net-mvc razor asp.net-mvc-5

我试图通过点击视图中的链接来降低用户的角色。

当我点击链接时,它没有进入操作,但它只是给出了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>
}

2 个答案:

答案 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进行调用