2013-07-09 63 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也會收到數組。

相關問題