2013-07-09 62 views
1

我在这里查看了一些主题,但我仍然在从复选框获取值时遇到问题。模型在asp.net中从formcollection获取复选框的值mvc

部分:

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) 
    { 
    ... 
    } 

而问题是我不明白TargetLanguages任何痕迹在我的FormCollection中。我试过CheckBoxFor,但它没有帮助。我也尝试手动写入复选框。

编辑:好吧,我只是注意到问题出在哪里。我弄乱了标记,这就是为什么我无法从FormCollection获取数据的原因。

回答

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也会收到数组。

相关问题