2011-10-03 77 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