我尝试动态创建包含不同类型字段的表单。然后简单地将用户输入的数据传递回控制器并绑定回我的模型。我为每个控件使用自定义编辑器模板,并希望它能在控制器中正确绑定。但是,每次该属性为NULL,因此我无法检索输入值。
模型
public class ReceiptModel : ClassBase
{
public int ReceiptId { get; set; }
public List<CustomControlModel> CustomControlList { get; set; }
}
public class CustomControlModel
{
public string CustomControlName { get; set; }
public CustomControlType CustomControlType { get; set; }
}
查看
@foreach (CustomControlModel ccm in @Model.CustomControlList)
{
if (!string.IsNullOrEmpty(ccm.PropertyName))
{
@Html.EditorFor(model => ccm, "CustomControlModel")
}
}
自定义模板
@Html.HiddenFor(model => model.CustomControlId)
<label>@Model.LabelCaption</label>
@switch (@Model.CustomControlType)
{
case CustomControlType.TEXTBOX:
if (@Model.ReadOnly)
{
@Html.TextBoxFor(model => model.CustomControlId, new { @readonly = "readonly", @Value = @Model.Value })
}
else
{
<input id="@Model.CustomControlName" name="@Model.CustomControlName" type="text" value="@Model.Value" />
}
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:1)
不要使用foreach。它不会在渲染的html中生成正确的属性名称,因此模型绑定器不会拾取属性。改为使用for循环:
@for (int i = p; I < @Model.CustomControlList.Count; i++)
{
if (!string.IsNullOrEmpty(Model.CustomControlList[i].PropertyName))
{
@Html.EditorFor(model => model.CustomControlList[i], "CustomControlModel")
}
}