1

始める前に、次の質問を見てきました。

エディター テンプレートの <List> 項目で asp.net mvc モデル バインディングが失敗する

私は次のように見えるモデルを持っています:

public class PartnerListModel
{
    public List<PartnersModel> Partners { get; set; }

    public PartnerListModel()
    {
        Partners = new List<PartnersModel>();
    }
}

そして、私の PartnersModel は次のようになります。

public class PartnersModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }
}

PartnersListModel をビューに渡します。これは次のようになります。

using (Html.BeginForm("Update", "Partners", FormMethod.Post))
            {
                @Html.EditorFor(m => m.Partners)
                <input type="submit" value="Submit Changes"/>
            }

最後に、私のエディター テンプレートは次のようになります。

@model AdminWebsite.Models.Partners.PartnersModel
<div>
    <span>
        @Html.DisplayFor(m => m.Name)
    </span>
    <span>
        @Html.EditorFor(m => m.IsActive)
    </span>
    @Html.HiddenFor(m => m.ID)
    @Html.HiddenFor(m => m.Name)
</div>

私のコントローラーのアクションはそのままで、コードは実際にこのアクションをヒットすることができます:

public ActionResult Update(PartnerListModel partners)

モデル内のリストのカウントが 0 になるのはなぜですか? 私の例が Stack Overflow で受け入れられている回答と異なる理由が見つかりません。返されたデータ値がリストに追加されない理由を説明するものはありますか?

Chrome の開発者ツールを使用して、次のようなリストがあることを確認できました。

  • パートナー[0].IsActive = true
  • パートナー[0].IsActive = false
  • Partners[0].Name = "こんにちは"
  • パートナー[0].ID = 1
  • Partners[1].IsActive = false など

何か案は?前もって感謝します。

4

1 に答える 1

3

アクション メソッドにa を渡していますList<PartnersModel>が、アクション メソッドはPartnerListModel.

次のように Action-method を変更する必要があります。

public ActionResult Update(List<PartnersModel> partners)

これは、デフォルトの ModelBinder が実際にはグラフをネストしていないためです。両方のアイテムにアクセスしたい場合は、両方のパラメーターを含める必要があります。

public ActionResult Update(PartnerListModel partnerlistmodel, List<PartnersModel> partners){

}

ネストされたモデルが必要な場合は、独自のモデルバインダーを実装する必要があります。

次の質問にも同様の問題があります: Binding an editable list of children

于 2013-05-14T21:46:11.823 に答える