0

ページにチェックボックスのリストがありますが、それらの値がコントローラーに到達していません。

ListViewModelこのビューで必要なすべてのモデルがここにあります。データベースからTechniquesのリストです。持っていると属性として。 同じサイズのテクニックタイプのブール配列ですTechniqueTechniqueTechiqueIDTypetech

@model ListViewModel
 @foreach (var item in Model.Techniques ){
                <div>
                    @Html.CheckBoxFor(m => m.tech[item.TechniqueID]) 
                    @item.Type 
                </div>
            }

tech[]コントローラーでnullが発生する理由は何ですか?tech[0] = falseコントローラなどにあるはずtech[1] = falseです。

出力:

<div>
   <input data-val="true" data-val-required="The Boolean field is required." id="tech_1_" name="tech[1]" type="checkbox" value="true" /><input name="tech[1]" type="hidden" value="false" /> 
   Slippers, Distracting Tasks
</div>
<div>
   <input data-val="true" data-val-required="The Boolean field is required." id="tech_2_" name="tech[2]" type="checkbox" value="true" /><input name="tech[2]" type="hidden" value="false" /> 
   Hallway Placement
</div>
4

2 に答える 2

1

あなたの問題は、コントロールのリストが0ベースでシーケンシャルである必要があるということです。最初のアイテムは1に基づいています。

これを維持する必要がある場合は、このためのカスタムモデルバインダーを作成する必要があります。より簡単な解決策は、TechniqueIDから1を減算し、それを使用するときに追加し直すことです。

もう1つのオプションは、tech [0]という名前の非表示フィールドを追加し、投稿のリストの最初の項目を無視することです。

于 2012-07-12T17:40:37.587 に答える
1

HTMLを適切に作成していません。モデルバインダーは、このような入力名をバインドできません。リストへのモデルバインディングの方法を説明しているこの記事を参照してください。記事から:

あなたが探しているHTML出力:

<form method="post" action="/Home/Create">

    <input type="text" name="[0].Title" value="Curious George" />
    <input type="text" name="[0].Author" value="H.A. Rey" />
    <input type="text" name="[0].DatePublished" value="2/23/1973" />

    <input type="text" name="[1].Title" value="Code Complete" />
    <input type="text" name="[1].Author" value="Steve McConnell" />
    <input type="text" name="[1].DatePublished" value="6/9/2004" />

    <input type="text" name="[2].Title" value="The Two Towers" />
    <input type="text" name="[2].Author" value="JRR Tolkien" />
    <input type="text" name="[2].DatePublished" value="6/1/2005" />

    <input type="submit" />
</form>

この出力を実現するためのサンプルコード:

<% for (int i = 0; i < 3; i++) { %>

  <%: Html.TextBoxFor(m => m[i].Title) %>
  <%: Html.TextBoxFor(m => m[i].Author) %>
  <%: Html.TextBoxFor(m => m[i].DatePublished) %> 

<% } %>
于 2012-07-12T17:43:25.267 に答える