2011-10-03 109 views
24

我有一個包含一組複選框的視圖模型。當我的控制器的回發方法綁定時,我需要複選框映射到一個數組。ASP.NET MVC-無法將數組綁定到視圖模型

這裏是視圖模型。

@model TMDM.Models.TestSeriesCreateViewModel 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create a Test Series</h2> 


@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Title) 
      @Html.ValidationMessageFor(model => model.Title) 
     </div> 

     <h3>Which Test Collections are in this Test Series?</h3> 
     <div class="editor-field"> 
     @{ 
      var i = 0; 
      foreach (var testCollection in Model.TestCollections) 
      { 
       <input type="checkbox" id="ChosenTestCollectionIds[@i]" name="ChosenTestCollectionIds[@i]" value="@testCollection.Id" /> 
       <span>@testCollection.Title</span> 
       <br /> 
       i++; 
      } 
     } 
     </div> 

     <p> 
      <input type="submit" value="Save" class="medium green awesome" /> 
      @Html.ActionLink("Cancel", "Index", "TestSeries", null, new { @class = "medium black awesome" }) 
     </p> 
    </fieldset> 

的形式渲染罰款,我檢查了源和每個輸出複選框有他們的ID和姓名字段一個不同的數字。

<input type="checkbox" id="ChosenTestCollectionIds[0]" name="ChosenTestCollectionIds[0]" value="5" /> 
<input type="checkbox" id="ChosenTestCollectionIds[1]" name="ChosenTestCollectionIds[1]" value="6" /> 
//etc... 

這裏是視圖模型。

public class TestSeriesModel 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
} 

public class TestSeriesCreateViewModel : TestSeriesModel 
{ 
    public List<ITestCollectionDataObject> TestCollections { get; set; } 
    public int[] ChosenTestCollectionIds { get; set; } 
} 

問題我遇到的情況是,當表單回傳ChosenTestCollectionIds數組時返回null。我在這裏做錯了什麼?

ANSWER

我已經計算出如何做到這一點:

<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" /> 
+1

你好。我可能會在幾個小時內幫助你,但同時你希望所有的複選框具有相同的「名稱」屬性和不同的「ID」。試試看看它是否有效。 –

+0

@payntbrush:完美。 +1擊敗我2。 –

回答

14
<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" /> 
0

設置輸入類型的名稱都是相同的。如果您試圖綁定比列表更復雜的模型,也可以創建自定義模型綁定器。這裏是關於不同方式的優秀文章綁定到你的模型

Various Model Binding techniques