将值从视图传递到控制器

Transfer value from view to controller

我一直在尝试将用户的 ID 从视图传递到我的控制器。我一直在视图中使用 ActionLink,在控制器中使用 ActionResult。似乎没有任何帮助。我也试过 Html.BeginForm 但效果不佳。在这两种情况下,我最终都会收到“未找到资源”错误。

这是我的控制器函数:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ApproveUser(int id)
{
    UserDTO user = new UserDTO();
    user = userService.GetUser(id);
    user.Approved = true;
    userService.Update(user);
    return RedirectToAction("Index");
}

这是我的观点(ActionLink):

@foreach (var item in Model.Users)
{
    if (item.Approved == false)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Id)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Login)
            </td>
            <td>
                @Html.ActionLink("Approve",  "ApproveUser", "AdminController", new { id = item.Id }, null)
            </td>
        </tr>
    }
}

这是错误的截图:

您想使用 @Html.ActionLink 传递一个 ID。你可以这样做:

首先指定正确的路线,您提到 AdminController 作为 Controller 参数。您只需要在此处指定 Admin 即可。将您的 id 更改为更具体的术语,例如 itemidid 可以混淆路由。

@foreach (var item in Model.Users)
{

    if (item.Approved == false)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Id)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Login)
            </td>
            <td>
                @Html.ActionLink("Approve", "ApproveUser", "Admin", new { itemid = item.Id }, null)
            </td>
        </tr>
    }
}

从您的 Controller 方法中删除属性,因为默认动词是 HttpGet,这就是您在这里所做的。不需要 ValidateAntiForgeryToken 属性,因为您不是首先生成它,它用于表单提交期间的 POST 请求。

public ActionResult ApproveUser(int itemid)
{
    UserDTO user = new UserDTO();
    user = userService.GetUser(itemid);
    user.Approved = true;
    userService.Update(user);
    return RedirectToAction("Index");
}