我的模特
public class User
{
public string Id { get; set; }
[Display(Name = "")]
public bool IsSelected { get; set; }
[Display(Name = "Nom")]
public string Name { get; set; }
[Display(Name = "Prénom")]
public string Firstname { get; set; }
}
public class ListUser
{
public string ClickedButton { get; set; }
[Display(Name = "")]
public List<Models.User> Users;
}
index.cshtml
在此页面上,我显示ListUser
中的所有用户,每个用户都可以通过复选框进行选择
@model Models.ListUser
<!-- some content here -->
<script>
function clickedButton(i){
document.getElementById("ClickedButton").value = i;
return true;
}
</script>
@using (Html.BeginForm("Index", "Users", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(m => m.ClickedButton);
for (var i = 0; i < Model.Users.Count(); i++)
{
@Html.CheckBoxFor(m => m.Users[i].IsSelected)
@Html.DisplayNameFor(m => m.Users[i].Name)
@Html.DisplayFor(m => m.Users[i].Name)
@Html.DisplayNameFor(m => m.Users[i].Firstname)
@Html.DisplayFor(m => m.Users[i].Firstname)
}
<input type="submit" value="Réinitialiser les mots de passe" class="btn btn-default" onclick="clickedButton('psw')"/>
}
这是控制器(当我提交表单时调用此控制器)
[HttpPost]
public ActionResult Index(ListUser model)
{
// I added a breakpoint here
return this.RedirectToAction("Index", "Home");
}
我想将所有选定的用户发送到控制器,例如当我选择4个用户时,我想在控制器中检索它们:
问题:当我提交表单时,只在模型中设置ClickedButton
字段,我选择的用户(通过复选框)未设置。
有什么问题?
答案 0 :(得分:1)
Users
是ListUser
类中的字段,而不是属性,DefaultModelBinder
不绑定字段。将其更改为
public class ListUser
{
public string ClickedButton { get; set; }
[Display(Name = "")]
public List<Models.User> Users { get; set; } // change
}
另请注意,唯一要绑定的属性是IsSelected
的{{1}}属性,并且您希望在视图中包含User
属性的隐藏输入,以便你匹配正确的选择
Id
答案 1 :(得分:0)
小变化可以帮助并确保所有输入都具有html格式的正确名称
public ActionResult Index(string ClickedButton, User model)