复选框值未通过POST

时间:2017-01-10 14:44:11

标签: asp.net-mvc razor checkbox

我的模特

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个用户时,我想在控制器中检索它们:enter image description here

问题:当我提交表单时,只在模型中设置ClickedButton字段,我选择的用户(通过复选框)未设置。

enter image description here

有什么问题?

2 个答案:

答案 0 :(得分:1)

UsersListUser类中的字段,而不是属性,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)