使用验证器向视图动态添加输入控件

时间:2011-09-28 08:30:12

标签: asp.net-mvc validation

我有一个注册页面,要求用户提供一些数据,例如:电子邮件地址。管理员应该能够自定义表单。例如,他可能对用户的出生地感兴趣,在这种情况下,注册表格中应该出现一个额外的文本框。

因为表单中的字段是动态的,所以我不能将它们作为属性添加到viewmodel。如何在运行时向视图添加输入控件和验证器?

2 个答案:

答案 0 :(得分:1)

您可以使用集合为动态表单创建模型类。例如:

public class MyParam {
  public string Name {get; set;}
  public string Value{get; set;}
}

public class MyDynamicForm {
  public List<MyParam> parameters {get; set;}
}

您可以创建一个使用参数循环构建表单的视图。要验证输入参数,您需要开发一个验证方法,在输入中接收FormCollection并通过Name验证每个参数。

答案 1 :(得分:0)

我用以下不太理想的方式解决了这个问题:

在我看来,我遍历我的自定义属性并在HtmlHelper上调用扩展方法来呈现Html:

foreach (var attribute in group.Attributes)
{ 
<tr>
    <td>
        @attribute.Name
    </td>
    <td>
        @Html.ValidationMessage(attribute.Id)
        @Html.AttributeEditor(attribute)
    </td>
</tr>
}

在AttributeEditor()方法中,我设置了不显眼的Javascript验证属性以启用客户端验证:

    if (IsRequired)
    {
        attributes["data-val-required"] = MvcCompaniesResources.UserProfileValidatorMessages.RequiredField;
        attributes["data-val"] = "true";
    }

这提供了客户端验证,并且与@Html.ValidationMessage()配合得很好。但是,我仍然需要单独实现服务器端验证。