我的模型看起来像
public class Template
{
Id
Title
List<Field> Fields
}
“字段”实体包含名称,标题,类型(文本框/选择/广播),选项和验证规则(范围,必需,字符串长度)等信息。
MVC中的标准验证基于DataAnnotations,但我想基于Field Metadata动态和可配置地验证(客户端和服务器端)表单。
有可能吗?有什么指针吗?
PS。我搜索了类似的问题,但无法找到可靠的答案。
答案 0 :(得分:4)
我有类似的情况,这就是我处理它的方式:
服务器端
当POST发生时,我遍历所有Fields值并根据我对象上的验证规则进行验证。然后,您只需将ModelErrors添加到Field对象即可。
由于您将Template对象推送到View,因此您可以按名称Fields[x].SomeProperty
访问字段。确保您ValidationMessageFor
SomeProperty
ModelState.AddModelError("Fields[x].SomeProperty", "The Error Message you want to show.);
客户端
确保您的表单具有Id,以便您可以访问Validate方法()。 然后迭代所有字段,只需添加验证。
对于所有验证规则,请检查验证Jquery文档。
$('#frmYourForm').validate();
for (var i = 0; i < 'CountOfAllFields'; i++)
{
$('#Fields_' + i + '__Foo').rules('add', { required: true, messages: { required: 'The Foo field is required'} });
$('#Fields_' + i + '__Bar').rules('add', { required: true, messages: { required: 'The Bar field is required'} });
}
我希望我能帮助你!
Ps,使用FireBug帮助您找到属性的正确名称,以及如何将它们与模型状态中的ModelErrors等链接。