在POST操作中用空字典检索对象

时间:2013-07-21 10:32:36

标签: c# asp.net-mvc-4

我有一个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
}

查看我生成的表单试图像这样做

@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());
}

转换方法执行此操作

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参数化。

0 个答案:

没有答案