.NET中的动态表单

时间:2018-07-11 08:41:15

标签: c# asp.net forms entity

我有属性表,它具有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>
}

问题是我正在得到这样的表格:

enter image description here

我理解为什么会这样,因为属性名称始终是相同的名称-“名称”。

模型是:

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"})

1 个答案:

答案 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