2017-02-15 11 views
0

クラスCreateActivityViewModelがViewに渡されます。ビューからコントローラへ2次元の `List`を送信できません

HTMLコードを生成するために、これらのコードを使用してビューで
public class CreateActivityViewModel 
{ 
public List<List<int>> SelectedDepartmentIds { get; set; } 
... 
} 

、:

<div class="form-group"> 

    @Html.Label("报名范围", htmlAttributes: new {@class = "col-xs-12"}) 
    <div> 
     <button id="repeat" type="button">增加单位范围</button> 
    </div> 
    @for (var i = 0; i < Model.MaxDepartmentLevel; i++) 
    { 
     <div class="col-xs-6"> 
      @if (i == 0) 
      { 
       @Html.Label((i + 1) + "级单位", htmlAttributes: new {@class = "control-label col-md-2"}) 
       @Html.DropDownListFor(x => x.SelectedDepartmentIds[0][i], Model.Departments, 
        "请选择单位", new {@class = "form-control department"}) 
      } 
      else 
      { 
       @Html.Label((1 + i) + "级单位", htmlAttributes: new {@class = "control-label col-md-2"}) 
       @Html.DropDownListFor(x => x.SelectedDepartmentIds[0][i], Enumerable.Empty<SelectListItem>(), 
        "所有单位", new {@class = "form-control department"}) 
      } 
     </div> 
    } 


</div> 

ここx => x.SelectedDepartmentIds[0][i]は、サーバーに戻って渡すことができない2 DIMENTION Listです。デバッグ時にcreateActivityViewModel.SelectedDepartmentIds=null。ただし、サーバーに渡しているかを確認するクローム開発ツールを使用して、私は提出しないSelectedDepartmentIdsを見た:

enter image description here

は、実際には、私は他の場所でほぼ同じ作業を試してみましたが、私が思う唯一の違いは、ということです成功の仕事は1つの次元Listを通過し、今は2次元です。 ASP.NETは2次元リストのバインディングをサポートしていませんか?

+2

'Create'アクションメソッドの署名を表示できますか? 'Content-Type'リクエストヘッダも表示できますか? –

+0

@DarinDimitrovありがとう!インスピレーションを受けて、私は 'Create'アクションシグネチャをチェックし、' Bind(Include = ...) 'にそのプロパティを追加するのを忘れていました。 – guo

+1

あなたは '[Bind]'属性を持たないようにビューモデルを使用しています –

答えて

1

これは期待どおりに動作するはずです。コメントから、作成アクションが使用している属性[Bind(Include=...)]にプロパティを含めるのを忘れてしまったようです。これは、ビュー・モデルを使用しているので、Bind属性は必要ありません。ビューモデルの一部であるプロパティは、単にバインドされます。エラーの発生が少なく明示的です。

関連する問題