在MVC 6中,如何在视图中编码复选框列表并将选中的值传递给控制器​​?

抱歉,我的大多数搜索都会将我带到旧的MVC代码。 任何帮助将不胜感激。

在带有标记帮助器的MVC 6中,如何编写一组复选框:

  • 使用标签帮助器作为标签,因此单击它将切换选中的值
  • 将选中的值保存(绑定?)到IsOptionSelected属性
  • 单击“提交”后,将这些选中的值传递回Controller

我能够正确显示带有标签的复选框,但我不知道如何通过模型将检查的值传递回控制器。 现在,IsOptionSelected值返回false。

我还能够为标签工作制作html帮助器,但不能为标签帮助器制作。 我可能也编码这些都错了所以任何提示都会有所帮助!

这是我到目前为止所拥有的:

显示:

电话选项复选框

实体:

public class PhoneOption { public bool IsOptionSelected { get; set; } = false; public int OptionId { get; set; } public string OptionName { get; set; } } 

模型:

 [Display(Name = "Phone Options")] public IEnumerable PhoneOptions { get; set; } . . . . PhoneOptions = repository.GetPhoneOptions(); 

库:

 public IEnumerable GetPhoneOptions() { IEnumerable options = new[] { new PhoneOption { OptionId = 1, OptionName = "Phone Case", IsOptionSelected = false }, new PhoneOption { OptionId = 2, OptionName = "Screen Protector", IsOptionSelected = false }, new PhoneOption { OptionId = 3, OptionName = "Car Charger", IsOptionSelected = false }, new PhoneOption { OptionId = 4, OptionName = "Extra Cable", IsOptionSelected = false } }; return options; } 

视图:

 
@foreach (var option in Model.PhoneOptions) {
@{ string cbId = "PhoneOption_" + @option.OptionId; } @Html.Label(@cbId.ToString(), @option.OptionName) @*This is causing invalid operation exception*@ @**@
}

提前致谢!

这最终是我做的工作。 我不确定这是否是最好的方法。 我不得不仍然使用html助手,因为标签助手不起作用。

模型:

 public List PhoneOptions { get; set; } . . . PhoneOptions = repository.GetPhoneOptions().ToList(); 

查看

 @if (@Model.PhoneOptions != null && @Model.PhoneOptions.Count() > 0) { for (int i = 0; i < @Model.PhoneOptions.Count(); i++) { 
@*If these are not included, all OptionIds become 0 and all OptionName becomes null*@ @Html.HiddenFor(x => @Model.PhoneOptions[i].OptionId) @Html.HiddenFor(y => @Model.PhoneOptions[i].OptionName)
} }

我希望这有助于其他拥有相同复选框列表问题的人。

更新:我已经更新了html帮助器以标记上面的助手。

这就是你的每个asp-for语法应该如何包装在带引号的字符串中

  @foreach (var option in Model.PhoneOptions) { 
@{ string cbId = "PhoneOption_" + @option.OptionId; } @Html.Label(@cbId.ToString(), @option.OptionName) @*This is causing invalid operation exception*@ @**@
}