@ Html.HiddenFor不会将值从CheckBoxFor传递给控制器​​

时间:2016-11-07 09:31:12

标签: c# asp.net-mvc model-view-controller

我试图从@ Html.CheckBoxFor传递给控制器​​,但它没有传递真值。我有ViewModel包含另一个ViewModel的IList,其中包含bool isSelected,似乎没有传递。代码看起来像那样

public class PackageItemsViewModel
    {


        public IList<ItemsViewModel> items{ get; set; }
    }

 public class ItemsViewModel
    {
       [Key]
        public int Id { get; set; }

        [Required]
        public string Type { get; set; }

            public bool isSelected { get; set; }
}

并在视图中

  @for (var i = 0; i < Model.items.Count; i++)
        {
            <tr>
                @Html.HiddenFor(x => x.devices[i].Id)

                <td>
                    @Html.HiddenFor(x => x.items[i].isSelected)
                    @Html.CheckBoxFor(x => x.items[i].isSelected)
                </td>
            </tr>
        }

1 个答案:

答案 0 :(得分:1)

DefaultModelBinder仅将匹配属性找到的第一个值绑定。在您的情况下,@Html.HiddenFor(x => x.items[i].isSelected)呈现您发送到视图的初始值,并且因为它在复选框之前,您将只绑定到该初始值(您的复选框被忽略)。

只需删除@Html.HiddenFor(x => x.items[i].isSelected),即可正确绑定值。

请注意,CheckBoxFor()方法会同时生成一个复选框(value="true"}和隐藏输入value="false",因此如果选中该复选框,则会true和{{}已发布1}}(但仅绑定了false),如果未选中,则仅发布true