我正在迭代我的Model.Payments
集合(这是public IEnumerable<Payments> Payments { get; set; }
):
@using (Html.BeginForm())
{
<div class="payments">
@foreach (var payment in Model.Payments)
{
Html.RenderPartial("_Payment", payment);
}
</div>
<input type="submit" value="Aggiorna" />
}
这是我的_Payment
部分:
@model MyProject.Models.Payments
<div class="payment-row">
<span>ActivityID:</span> @Html.TextBoxFor(x => x.ActivityID)
<span>PaymentType:</span> @Html.TextBoxFor(x => x.PaymentType)
<span>Amount:</span> @Html.TextBoxFor(x => x.Amount)
</div>
但是它不能创建正确的HTML。名称/ ID相同,因此回发后就无法检索数据。
我在哪里错了?
答案 0 :(得分:1)
正确的方法是使用EditorFor()
方法,该方法将为您的输入正确加上集合索引器
将部分视图重命名为Payments.cshtml
(以匹配类的名称),然后将其移至/Views/Shared/EditorTemplates
(或/Views/YourControllerName/EditorTempatesFolder
)
然后您看到的变成
@using (Html.BeginForm())
{
<div class="payments">
@Html.EditorFor(m => m.Payments)
</div>
<input type="submit" value="Aggiorna" />
}
EditorFor()
方法会为集合中的每个项目生成正确的html,并将生成诸如<input name="Payments[0].ActivityID" ... />
之类的输入,而不是您当前正在生成的<input name="ActivityID" ... />
。
作为旁注,您应该考虑使用@Html.LabelFor()
来生成与表单控件相关联的<label>
,而不是使用<span>
。