我目前在浏览器中编辑集合时遇到问题。我想编辑一个视图模型,它有3个属性,一个int,一个字符串和一个项目列表。
以下是代码:
public class HospitalDoctorAttributions {
public string HospitalID { get; set; }
public int Year { get; set; }
public List<AmountOfWork> Attributions { get; set; }
}
public class AmountOfWork {
public WorkAreaEnum Sector { get; set; }
public decimal FullTimeEquivalent { get; set; }
public string Comment { get; set; }
}
我想按工作部门编辑属性,所以我制作了这个编辑器模板:
@model AmountOfWork
@Html.HiddenFor(model => model.Sector)
<tr>
<td>@Model.Sector.GetDisplayName()</td>
<td>@Html.EditorFor(model => model.FullTimeEquivalent)</td>
<td>@Html.EditorFor(model => model.Comment)</td>
</tr>
视图提到的内容:
@model HospitalDoctorAttribution
// [...] Editors for the first two properties in the model
<table class="table table-bordered">
<tr>
<th>Work Sector</th>
<th>Amount by FTE</th>
<th>Comment (optional)</th>
</tr>
@for (var i = 0; i < Model.Attributions.Count; i++)
{
@Html.EditorFor(x => x.Attributions[i])
}
</table>
当我打开视图时,AmountOfWork项的属性被正确映射,但是当我编辑它们时,似乎没有任何内容被发布回控制器。然而,Year和HospitalID已成功发回控制器。
如何解决这个问题?
编辑:生成的HTML代码
<tr>
<input Value="0" data-val="true" data-val-required="Le champ Sector est requis." id="Attributions_0__Sector" name="Attributions[0].Sector" type="hidden" value="URGENCE" />
<td>Urgence</td>
<td><input class="text-box single-line" data-val="true" data-val-number="Le champ FullTimeEquivalent doit être un nombre." data-val-required="Le champ FullTimeEquivalent est requis." id="Attributions_0__FullTimeEquivalent" name="Attributions[0].FullTimeEquivalent" style="display:table-cell; width:100%" type="text" value="0,00" /></td>
<td><input class="text-box single-line" id="Attributions_0__Comment" name="Attributions[0].Comment" style="display:table-cell; width:100%" type="text" value="" /></td>
</tr>
<tr>
<input Value="1" data-val="true" data-val-required="Le champ Sector est requis." id="Attributions_1__Sector" name="Attributions[1].Sector" type="hidden" value="GERIARTRIE" />
<td>Gériatrie</td>
<td><input class="text-box single-line" data-val="true" data-val-number="Le champ FullTimeEquivalent doit être un nombre." data-val-required="Le champ FullTimeEquivalent est requis." id="Attributions_1__FullTimeEquivalent" name="Attributions[1].FullTimeEquivalent" style="display:table-cell; width:100%" type="text" value="0,00" /></td>
<td><input class="text-box single-line" id="Attributions_1__Comment" name="Attributions[1].Comment" style="display:table-cell; width:100%" type="text" value="" /></td>
</tr>
答案 0 :(得分:0)
MVC应该使用Editor模板自动索引属性,因此它只是用于收集的编辑器,而模型绑定器将应用循环和名称索引:
@Html.EditorFor(x => x.Attributions, "Name of the editor for Single Item if not the same as DataType")