我有一个注册页面,要求用户提供一些数据,例如:电子邮件地址。管理员应该能够自定义表单。例如,他可能对用户的出生地感兴趣,在这种情况下,注册表格中应该出现一个额外的文本框。
因为表单中的字段是动态的,所以我不能将它们作为属性添加到viewmodel。如何在运行时向视图添加输入控件和验证器?
答案 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()
配合得很好。但是,我仍然需要单独实现服务器端验证。