将值从视图传递到控制器
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
更改为更具体的术语,例如 itemid
。 id
可以混淆路由。
@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");
}
我一直在尝试将用户的 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
更改为更具体的术语,例如 itemid
。 id
可以混淆路由。
@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");
}