2011-10-03 33 views
24

私は、チェックボックスのセットを含むfromを持つビューモデルを持っています。コントローラのポストバックメソッドでバインドするときに、配列にマップするためのチェックボックスが必要です。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:パーフェクト。私が2でそれを打つための+1。 –

答えて

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

は同じで、すべての入力タイプの名前を設定します。リストよりも複雑なモデルをバインドしようとしている場合は、カスタムモデルバインダーを作成することもできます。ここにあなたのモデル

Various Model Binding techniques

8

私はいつもモデルはリストを結合についてバックフィル・ハークさんの投稿へ来るにバインドするためにさまざまな方法での逸品です。さらに、私は自分のインデックスを定義しています。私のユーザーはクライアント側のリストを変更し、変更をポストバックするからです。

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

関連する問題