如何在 devexpress 中向表单字段添加动态验证规则

Posted

技术标签:

【中文标题】如何在 devexpress 中向表单字段添加动态验证规则【英文标题】:How to add a dynamic validation rule to a form field in dev express 【发布时间】:2020-02-01 19:29:17 【问题描述】:

美好的一天,我是 Dev express 的新手,也是 razor pages 的新手。

我有一个包含用户列表的开发极端数据网格,用户具有用户类型,用户类型具有用户 ID 的最小范围和最大范围。

我想要的是在数据网格的标准编辑表单上的列上设置范围验证规则,因此当您添加新用户 id 时,用户 id 应该介于例如 1 和 49999 之间。范围存储在数据库。所以用户首先选择用户类型,用户类型表中会有一个范围,例如“员工”的用户类型的范围是 min 1 max 49999,这个范围我想在我的表单上用作验证。

目前我的 DevExtreme 数据网格代码:

@(html.DevExtreme().DataGrid<ACS.LIB.BE.User>().ID("userGrid")
.ElementAttr(new  @class = "dx-card wide-card" )
.DataSource(d => d.Mvc().Controller("User")
    .LoadAction("Get").Key("ID")
    .InsertAction("InsertUser")
    .UpdateAction("UpdateUser")
    .DeleteAction("DeleteUser"))
.ShowBorders(false)
.FilterRow(f => f.Visible(true))
.FocusedRowEnabled(true)
.FocusedRowIndex(0)
.ColumnAutoWidth(true)
.ColumnHidingEnabled(true)
.Columns(columns =>

    columns.AddFor(m => m.ID).ValidationRules(val => val.AddRange().Min(100));
    columns.AddFor(m => m.Name);

    columns.AddFor(m => m.UserType.ID).Lookup(lookup => lookup
                    .DataSource(ds => ds.WebApi().Controller("UserType").LoadAction("Get").Key("ID"))
                    .DisplayExpr("Name")
                    .ValueExpr("ID")
                    ).Caption("User Type");
    columns.AddFor(m => m.Department.ID).Lookup(lookup => lookup
                    .DataSource(ds => ds.WebApi().Controller("Department").LoadAction("Get").Key("ID"))
                    .ValueExpr("ID")
                    .DisplayExpr("Name")
                    ).Caption("Department");
    columns.AddFor(m => m.Company.ID).Lookup(lookup => lookup
                    .DataSource(ds => ds.WebApi().Controller("Company").LoadAction("Get").Key("ID"))
                    .ValueExpr("ID")
                    .DisplayExpr("Name")
                    ).Caption("Company");
    columns.AddFor(m => m.Authority);
    columns.AddFor(m => m.Email).ValidationRules(v => v.AddEmail().Message("Please enter a valid email address. yourname@yourdomain.com"));
    columns.AddFor(m => m.Active).FilterValue(true);

)

我遇到的问题是columns.AddFor(m =&gt; m.ID).ValidationRules(val =&gt; val.AddRange().Min(100));

Min(100) 我想从一个没有像现在这样硬编码的数据源动态设置它,用户首先选择 Usertype 然后我想使用 UserType 表来获取 id 应该在的范围。所以我想从我的用户表中获取 100,但我不确定语法是什么或我应该如何去做。

我的用户类型表:

我的插入屏幕默认弹出来自数据网格的编辑对话框。

任何帮助或指点将不胜感激。

【问题讨论】:

【参考方案1】:

您似乎需要定义一个custom validation rule。您可以使用validationCallback 函数中的options.data 参数获取用户类型 值。

请注意,最佳 ASP.NET Core 实践是使用模型属性的Data Annotation validation attributes。 DevExtreme ASP.NET Core 组件支持它们。

您可以在Implement a Custom Validation Rule 主题中找到代码 sn-ps。

【讨论】:

以上是关于如何在 devexpress 中向表单字段添加动态验证规则的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中向 ModelForm 添加外键字段?

Django 1.4 - 在元字段 Model=User 的表单中向用户字段添加自定义错误消息

在管理员中向 Django 的 export_as_csv 操作添加动态字段

如何在 Django 中向 bootstrap4 添加松脆的表单?

动态添加字段到表单

数据库动态添加字段