您关于通用列表的问题非常具有误导性,我怀疑它与您的实际问题无关。
取决于您在视图中生成复选框的方式,这可能与否。如果您直接使用<input type="checkbox">
未选中复选框的标记值对它们进行硬编码,则永远不会将它们发送到服务器 - 这就是 HTML 复选框的工作方式。在这种情况下,您将无法获得所有值。另一方面,如果您使用Html.CheckBoxFor
助手生成它们,那么您会注意到该助手为每个复选框添加了一个隐藏字段,以便发送所有值。不过,此助手对布尔值进行操作。
因此,我建议您创建一个包含 2 个属性的视图模型:一个保存您感兴趣的值,一个布尔属性指示用户是否在视图中选择了此值:
public class ItemViewModel
{
public string Value { get; set; }
public bool Checked { get; set; }
}
然后有一个视图模型,其中包含这些项目的集合:
public class MyViewModel
{
public ItemViewModel[] Items { get; set; }
}
现在在您的视图中,您可以像这样呈现这些值:
@model MyViewModel
@using (Html.BeginForm())
{
for ( var i = 0; i < Model.Items.Length; i++)
{
<div>
@Html.CheckBoxFor(x => x.Items[i].Checked)
@Html.HiddenFor(x => x.Items[i].Value)
</div>
}
<button type="submit">OK</button>
}
最后,在这个表单将提交给您的控制器操作中,您将能够获取所有值:
[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
foreach (var item in model.Items)
{
// here you could use item.Checked and item.Value
}
...
}