如何将复选框值绑定到整数列表?

我正在关注这个例子

在此输入链接描述

但是当我提交时,它表示不能将’false’转换为’int’

因为我认为它是通过的错误或真实,而不是实际价值

我究竟做错了什么?

我的模特是

public IEnumerable Requirements { get; set; } public List RequirementIds { get; set; } 

然后我的剃刀是

  
@foreach (var requirement in Model.Requirements) {
@requirement.Description
}

您的模型需要包含选中的值和所有可能的值。

 public class TestViewModel { public Guid Id { get; set; } public IDictionary AllCheckboxOptions { get; set; } public Guid[] CheckedOptions { get; set; } } 

我在我的数据库中使用Guids作为PK,因此这些是数据库中的ID

然后我创建了许多扩展方法来生成html

  public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, String name, List listInfo, IDictionary htmlAttributes, Int32 columns) { if (String.IsNullOrEmpty(name)) throw new ArgumentException("The argument must have a value", "name"); if (listInfo == null) throw new ArgumentNullException("listInfo"); if (!listInfo.Any()) return new MvcHtmlString(String.Empty); var outerSb = new StringBuilder(); for (Int32 i = 0; i < columns; i++) { var listBuilder = new TagBuilder("ul"); if (columns > 1) listBuilder.MergeAttribute("class", "column"); var innerSb = new StringBuilder(); var take = listInfo.Count % columns == 0 ? listInfo.Count / columns : (listInfo.Count / columns) + 1; var items = listInfo.Skip(i * take).Take(take); foreach (var info in items) { var inputBuilder = new TagBuilder("input"); if (info.Selected) inputBuilder.MergeAttribute("checked", "checked"); inputBuilder.MergeAttribute("type", "checkbox"); inputBuilder.MergeAttribute("value", info.Value); inputBuilder.MergeAttribute("id", info.Value); inputBuilder.MergeAttribute("name", info.Value); var labelBuilder = new TagBuilder("label"); labelBuilder.MergeAttribute("for", @info.Value); labelBuilder.InnerHtml = info.Text; var listItemWrapper = new TagBuilder("li"); //may have to encode here. listItemWrapper.InnerHtml = inputBuilder.ToString(TagRenderMode.SelfClosing) + labelBuilder.ToString(TagRenderMode.Normal); innerSb.Append(listItemWrapper.ToString(TagRenderMode.Normal)); } listBuilder.InnerHtml = innerSb.ToString(); outerSb.Append(listBuilder.ToString(TagRenderMode.Normal)); } return new MvcHtmlString(outerSb.ToString()); } 

然后在视图中,您可以调用您的扩展方法

  @Html.CheckBoxList("yourtypes", (from o in Model.AllCheckboxOptions select new SelectListItem { Text = o.Value, Selected = Model.CheckedOptions.Contains(o.Key), Value = o.Key.ToString() }).ToList()) 

我已经成功地将这种技术与MVC3和MVC4结合使用。