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

时间:2019-10-03 13:04:54

标签: asp.net-core devextreme devexpress-mvc

早上好,我是Dev Express和剃须刀页面的新手。

我有一个带有用户列表的dev Extreme数据网格,一个用户具有一个用户类型,该用户类型具有用户ID的最小范围和最大范围。

我想要在datagrid的标准编辑表单上的列上设置范围验证规则,因此当您添加新的用户ID时,用户ID应该介于1到49999之间。范围存储在数据库。因此,用户首先选择用户类型,用户类型表中将有一个范围,例如,“雇员”用户类型的范围将为最小1到最大49999,该范围我想用作表单上的验证。 / p>

当前我的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 => m.ID).ValidationRules(val => val.AddRange().Min(100));

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

我的用户类型表: enter image description here

从数据网格的编辑对话框中弹出我的插入屏幕默认弹出窗口。 enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

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

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