MVC动态表单控制与模型的绑定

时间:2016-01-08 23:09:11

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

我尝试动态创建包含不同类型字段的表单。然后简单地将用户输入的数据传递回控制器并绑定回我的模型。我为每个控件使用自定义编辑器模板,并希望它能在控制器中正确绑定。但是,每次该属性为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" />
}

非常感谢任何帮助。提前谢谢。

1 个答案:

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