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