1

MVC 4 フォームを使用して、プロパティに常に 4 つの子を含むモデルがありList<T>ます。ビューには、Razor 部分ビューでレンダリングされた 4 つの子モデルのそれぞれで、モデルが正しく表示されます。問題は、送信/投稿すると、モデルが子リストの null 値で逆シリアル化されることです。

モデル:

public class MyModel
{
    public int SomeValue { get; set; }

    public List<ChildModel> Children { get; set; }

    ...
}

意見:

@model MyProject.Models.MyModel

@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.SomeValue)

    @Html.Partial("ChildPartial", Model.Children[0])
    @Html.Partial("ChildPartial", Model.Children[1])
    @Html.Partial("ChildPartial", Model.Children[2])
    @Html.Partial("ChildPartial", Model.Children[3])

    <input type="submit" value="Save" />
}

コントローラ:

public class MyController : Controller
{
    public ActionResult Index()
    {
        MyModel model = new MyModel();
        model.Children = new List<ChildModel>();

        model.Children.Add(new ChildModel());
        model.Children.Add(new ChildModel());
        model.Children.Add(new ChildModel());
        model.Children.Add(new ChildModel());

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        //model.Children is null here

        //do stuff
        ...

        return RedirectToAction("Index", "SomeOtherController");
    }
}

ChildPartialビューはそれぞれ正しくレンダリングされており、コントロールに値を入力していますが、List<ChildModel>. MyModelPost メソッドで逆シリアル化するルート レベルのプロパティしか取得できません。

コントローラーの Post メソッドの先頭に追加しようとしUpdateModel(model);ましたが、運がありません。何か案は?

編集

ChildModel.cs:

public class ChildModel
{
    public String Name { get; set; }
    public double Ratio { get; set; }
    ...
}

ChildPartial.cshtml:

@model MyProject.Models.ChildModel

<div>
    <div>
        <div>
            <span>@Model.Name</span>
        </div>
        <div>
            @Html.LabelFor(m => m.Ratio)
            @Html.TextBoxFor(m => m.Ratio, new { autocomplete = "off" })
            @Html.ValidationMessageFor(m => m.Ratio)
        </div>
    </div>

    ...
</div>
4

1 に答える 1