验证MVC中的动态字段

时间:2011-08-29 09:53:00

标签: asp.net-mvc-3

我的模型看起来像

public class Template
{
    Id
    Title
    List<Field> Fields
}

“字段”实体包含名称,标题,类型(文本框/选择/广播),选项和验证规则(范围,必需,字符串长度)等信息。

MVC中的标准验证基于DataAnnotations,但我想基于Field Metadata动态和可配置地验证(客户端和服务器端)表单。

有可能吗?有什么指针吗?

PS。我搜索了类似的问题,但无法找到可靠的答案。

1 个答案:

答案 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等链接。