0

ASP.NET MVC 4 アプリがあり、このようなモデルがあります

public class ModelEdit : ModelView
{

    public Dictionary<int, bool> id_photos_list;

    public Dictionary<int, bool> id_polaroids_list;

    //some another fields
}

このようなidを実行しようとしているフォームを生成するビュー

@using (Html.BeginForm("Edit", "ModelAgency", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <ol>
            @*some another inputs*@
            <li>
                @Html.Label("Polaroids")
                @foreach (var im in Model.Polaroid)
                {
                        <img src ="@im.Path">
                        @Html.CheckBoxFor(mm => mm.id_polaroids_list[im.Id])
                }
            </li>
            <li>
                @Html.Label("Photos")
                @foreach (var im in Model.Photo)
                {
                        <img src ="@im.Path">
                        @Html.CheckBoxFor(mm => mm.id_photos_list[im.Id])
                }
            </li>
        </ol>
        <input type="submit" />
    </fieldset>
}

よくわかりませんが、このコード フォームによって生成されたものは有効であるように見えます (Chrome で検査し、リクエスト ペイロードを確認します) が、編集アクションによって取得されるオブジェクトでは、他のフィールドがそうでない場合、これらの辞書は空です。

これは、MVC フレームワークが POST リクエストからオブジェクトを生成するためにリフレクションを使用し、ディクショナリの使用に問題があるために発生すると思いますが、これを回避する方法がわかりません。

アップデート。@model Site.Models.ModelEdit 実際、前のビューは部分的であり、呼び出されたもので 強く型付けされています

@model Site.Models.ModelCollection

@foreach (var m in Model)
{
    @Html.Partial("PartialEditModel", m.Convert());
}

Convert メソッドがこれを行う場所

public ModelEdit Convert()
    {
        ModelEdit editor = new ModelEdit();

        //here copy fields value from ModelView to ModelEdit

        foreach (var ph in editor.Photo)//Photo is EntitySet<Photo>
        {
            editor.id_photos_list.Add(ph.Id, false);
        }

        foreach (var pol in editor.Polaroid)//Polaroid is EntitySet<Polaroid>
        {
            editor.id_polaroids_list.Add(pol.Id, false);
        }

        return editor;
    }

コントローラーでは、私の POST アクションは ModelEdit によってパラメーター化されます。

4

0 に答える 0