我有一个视图,其中显示用户列表,将模型设置为:
@model List<MyProject.Models.User>
在此视图中,我希望能够选择对特定用户执行操作,即发布到我要禁用用户的控制器。如何将特定用户对象发布到控制器?
这是我迄今为止所做的,但我无法看到如何从集合中发布特定对象:
@foreach (var c in Model)
{
<tr>
<td>@c.Username</td>
<td>@c.IsEnabled</td>
<td>
@using (Html.BeginForm("DisableUser", "UserManagement"))
{
<input type="submit" value="Disable" class="btn btn-primary"/>
}
</td>
</tr>
}
我的控制器有签名:
public ActionResult DisableUser(User user)
答案 0 :(得分:2)
您可以在User
方法中添加路由值,以便回发ID或用户BeginForm()
UserId`,然后>,而不是回发. Assuming that property is named
的所有内容。 p>
@foreach (var c in Model)
{
<tr>
....
<td>
@using (Html.BeginForm("DisableUser", "UserManagement", new { id = c.UserId ))
{
<input type="submit" value="Disable" class="btn btn-primary"/>
}
</td>
</tr>
}
并且控制器方法将是
public ActionResult DisableUser(int id)
{
// Get the User based on id, update it and redirect
}
您还可以考虑使用ajax提交值,以便用户可以停留在同一页面上并继续“停用”&#39;其他User
个对象无需进行重定向,在这种情况下代码可能是
@foreach (var c in Model)
{
<tr>
....
<td>
<button type="button" class="disable" data-id="@c.UserId">Disable</button>
</td>
</tr>
}
var url = '@Url.Action("DisableUser", "UserManagement")';
$('.disable').click(function() {
var row = $(this).closest('tr');
$.post(url, { id: $(this).data('id') }, function(result) {
if(result) {
// for example, remove the row from the table
row.remove();
} else {
// Oops
}
}).fail(function (result) {
// Oops
});
});
并且控制器方法将是
public JsonResult DisableUser(int id)
{
// Get the User based on id and update it
return Json(true);
// or if the update failed - return Json(null);
}
答案 1 :(得分:0)
禁用用户的简单方法是使用Html.ActionLink而不是表单 - 您应该能够在模板代码中看到大量示例。操作链接可以重定向到确认页面,或者您可以禁用该用户并重定向到消息页面,说明&#34;用户已被禁用&#34;。
我更好的方法是使用AJAX。您可以使用jQuery执行此操作,也可以使用MVC Ajax form或Ajax Action Link。我建议您使用谷歌MVC Ajax Action Link示例。
您可能还希望通过将其设置为Bootstrap 'btn' class来为该链接设置样式。
答案 2 :(得分:0)
有一种方法可以发布单个用户
@foreach (var c in Model)
{
<tr>
<td>@c.Username</td>
<td>@c.IsEnabled</td>
<td>
@using (Html.BeginForm("DisableUser", "UserManagement"))
{
<input type="text" name="Username" value="@c.Username">
<input type="text" name="IsEnabled" value="@c.IsEnabled">
<input type="hidden" name="id" value="@c.id">
<input type="submit" value="Disable" class="btn btn-primary"/>
}
</td>
</tr>
}
这些想法是一样的,由于时间不够,请按照您的要求进行,使用Class Property名称作为输入名称,动作将获得值
答案 3 :(得分:-1)
首先,你不得在任何循环中声明Html.BeginForm以将对象发布到控制器。
@using (Html.BeginForm("DisableUser", "UserManagement"))
{
@foreach (var c in Model)
{
<tr>
<td>@c.Username</td>
<td>@c.IsEnabled</td>
<td>
<input data-id="@c.Id" type="submit" value="Disable" class="clsBtnPost btn btn-primary"/>
</td>
</tr>
}
}
这是供您参考
$(document).ready(function(){
$(".clsBtnPost").click(function(){
var userId = $(this).data("id");
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: 'ControllName/MethodName', //Your Url
data: { 'userId': userId },
success: function () {
alert("successfully called.");
},
failure: function (response) {
alert("Error");
}
});
});
});
您可以使用 Ajax 调用将单个对象传递给控制器。