我在这里查看了一些主题,但我仍然遇到从复选框中获取值的问题。
模型的一部分:
public Dictionary<Language, bool> TargetLanguages { get; set; }
观点的一部分:
<div class="editor-label">
<label for="TargetLanguages">select target languages</label>
</div>
<div class="editor-field">
<form>
@foreach (var item in Model.TargetLanguages)
{
@Html.CheckBox("TargetLanguages["+item.Key.Name+"]", item.Value)
@item.Key.Name
}
</form>
</div>
控制器的一部分:
[HttpPost, ActionName("AddDictionary")]
public ActionResult AddDictionary(FormCollection collection)
{
...
}
问题是我在FormCollection中没有得到任何TargetLanguages的痕迹。我试过CheckBoxFor,但没有帮助。我也尝试手动写入复选框。
编辑:好的,我刚注意到问题所在。我搞砸了标记,这就是我无法从FormCollection获取数据的原因。
答案 0 :(得分:2)
创建所有具有相同名称的复选框。在这个示例中,我使用的是'SelectedTargetLanguages'。
@using (Html.BeginForm())
{
foreach (var item in Model.TargetLanguages)
{
<label>
@Html.CheckBoxFor(m => m.SelectedTargetLanguages, item.value)
@item.KeyName
</label>
}
<br/>
@Html.SubmitButton("Actualizar listado")
}
然后,在您的操作中,参数必须是这样的字符串数组:
public ActionResult AddDictionary(string[] selectedTargetLanguages)
请注意,参数的名称与复选框的名称相同。 (它甚至可以使用不同的外壳)。
您应该使用这样的显式参数,而不是通用的FormCollection
。无论如何,如果你使用FormCollection,你shpuld也会收到数组。
答案 1 :(得分:1)