我有属性表,它具有ID和名称。
我需要为这些属性动态编写一个表单。
我尝试过这样的事情:
@foreach (var item in Model.Properties) {
<div class="col-md-6 margin_top_15">
@Html.LabelFor(m => item.Name, new {@class = "col-md-2 control-label"})
<div class="col-md-10">
@Html.TextBoxFor(m => item.Name, new {@class = "form-control"})
@Html.ValidationMessageFor(m => item.Name, "", new {@class = "text-danger"})
</div>
</div>
}
问题是我正在得到这样的表格:
我理解为什么会这样,因为属性名称始终是相同的名称-“名称”。
模型是:
public class PropertyField {
[Key]
public int FieldId { get; set; }
public string FieldName { get; set; }
public string FieldValue { get; set; }
}
我可以将LabelFor更改为Label并获得良好的外观,但是在提交模型时为null:
@Html.Label(item.FieldName, new {@class = "col-md-2 control-label"})
答案 0 :(得分:0)
请尝试将foreach
循环更改为标准for
循环,因为为多个元素生成相同的元素ID将产生无效的标记:
// assumed that Model.Properties has type of List<PropertyField>
@for (var i = 0; i < Model.Properties.Count(); i++)
{
<div class="col-md-6 margin_top_15">
@Html.LabelFor(m => Model.Properties[i].FieldName, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => Model.Properties[i].FieldName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => Model.Properties[i].FieldName, "", new { @class = "text-danger" })
</div>
</div>
}
通过使用foreach
循环,MVC默认模型绑定程序无法正确绑定视图页面中的所有属性,因为某些HTML元素的命名不正确,因此列表集合在提交表单后包含空值。
相关问题:
For each loop with controls and submitting form (Html.BeginForm) in MVC 4