C# 如何将复选框值绑定到整数列表?
我遵循这个例子 但当我提交时,它说不能将'false'转换为'int' 因为我假设传递的是false或true,而不是实际值 我做错了什么 我的模型是C# 如何将复选框值绑定到整数列表?,c#,.net,asp.net-mvc-3,asp.net-mvc-4,C#,.net,Asp.net Mvc 3,Asp.net Mvc 4,我遵循这个例子 但当我提交时,它说不能将'false'转换为'int' 因为我假设传递的是false或true,而不是实际值 我做错了什么 我的模型是 public IEnumerable<AllocateRequirementViewModel> Requirements { get; set; } public List<int> RequirementIds { get; set; } public IEnumerable需求{get;set;} 公共
public IEnumerable<AllocateRequirementViewModel> Requirements { get; set; }
public List<int> RequirementIds { get; set; }
public IEnumerable需求{get;set;}
公共列表要求{get;set;}
那我的剃须刀是
<div id="RequirementsContainer">
@foreach (var requirement in Model.Requirements)
{
<div class="row">
<input id="@requirement.Id" type="checkbox" name="RequirementIds" value="@requirement.Id" /> @requirement.Description
</div>
}
</div>
@foreach(模型要求中的var要求)
{
@要求.说明
}
您的模型需要同时包含选中的值和所有可能的值
public class TestViewModel
{
public Guid Id { get; set; }
public IDictionary<Guid, String> AllCheckboxOptions { get; set; }
public Guid[] CheckedOptions { get; set; }
}
我已经成功地将这种技术用于MVC3和MVC4
public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, String name, List<SelectListItem> listInfo,
IDictionary<String, Object> 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())