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 请求生成对象,而问题在于使用 Dictionary,但我不知道如何避免这种情况。

UPD。 实际上,先前的视图是部分的,并且是强类型的@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