我有一个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参数化。