【问题标题】:Validation of dynamic fields in a MVC验证 MVC 中的动态字段
【发布时间】:2011-08-29 09:52:59
【问题描述】:

我的模型看起来像

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

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

MVC 中的标准验证基于 DataAnnotations,但我想根据动态且可配置的字段元数据动态验证(客户端和服务器端)表单。

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

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

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

    我也遇到过类似的情况,我是这样处理的:

    服务器端

    当 POST 发生时,我迭代了所有字段值,并根据我对对象的验证规则进行了验证。然后,您可以简单地将 ModelErrors 添加到 Field 对象。

    由于您将模板对象推送到视图,因此您可以按名称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 等链接起来。

    【讨论】:

    • 谢谢,这会有所帮助。所以在服务器端你自己做所有的检查?
    • 是的,在字段上我有一个 DynamicValidation 对象列表(自写类)。此类具有 ErrorMessage、Enums.ValidationType 属性。以及 MaxLength 等内容的 ExtraProperty。Enums.ValidationType 具有必需、数字等。这样我可以将验证列表添加到我的字段中。然后我写了一个方法来检查他的验证字段,如果需要,将 ErrorMessage 添加到 ModelState。
    • 关于服务器端方法:您说,您“遍历所有字段值并根据我对对象的验证规则进行验证。”Q : 'ModelState' 只在控制器或视图的范围内,对吧?所以,我知道实际验证(又名 if-checks)发生在“Field”对象中,但您必须在控制器中调用“ModelState.AddModelError()”。这是正确的吗?我试图了解您是否能够在业务代码与表示层代码(ASP.NET MVC)中进行所有验证。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多