Razor MVC 5 - 编辑包含枚举的项目集合

时间:2017-07-17 16:58:40

标签: c# asp.net-mvc razor

我目前在浏览器中编辑集合时遇到问题。我想编辑一个视图模型,它有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>

1 个答案:

答案 0 :(得分:0)

MVC应该使用Editor模板自动索引属性,因此它只是用于收集的编辑器,而模型绑定器将应用循环和名称索引:

@Html.EditorFor(x => x.Attributions, "Name of the editor for Single Item if not the same as DataType")