Vb.net 使用对象列表进行FluentValidation
现在我有一个viewmodel,它包含三个输入列表;textboxinput、dropdownlistinput和checkboxinput。每个列表都是输入对象的列表,其中包含四个值;参数、参数名、参数类型和值。我使用这些输入列表在表单上生成可变数量的字段,这取决于每个列表包含多少对象 我目前的问题是,我不确定如何使用fluent验证来验证列表对象中的变量。我知道每个列表在不返回任何内容时的行为应该如何,但我不知道如何使用FluentValidation对该行为进行编码 输入模型:Vb.net 使用对象列表进行FluentValidation,vb.net,asp.net-mvc-3,validation,lambda,fluentvalidation,Vb.net,Asp.net Mvc 3,Validation,Lambda,Fluentvalidation,现在我有一个viewmodel,它包含三个输入列表;textboxinput、dropdownlistinput和checkboxinput。每个列表都是输入对象的列表,其中包含四个值;参数、参数名、参数类型和值。我使用这些输入列表在表单上生成可变数量的字段,这取决于每个列表包含多少对象 我目前的问题是,我不确定如何使用fluent验证来验证列表对象中的变量。我知道每个列表在不返回任何内容时的行为应该如何,但我不知道如何使用FluentValidation对该行为进行编码 输入模型: 公共类输入
公共类输入
属性值作为字符串
属性参数名称为字符串
属性参数类型为字符串
属性参数作为列表(字符串的列表)
末级
ParamViewModel:
导入FluentValidation
导入FluentValidation.Attributes
_
公共类参数模型
属性TextBoxInput作为(输入的)列表
属性放置为列表(输入)
属性CheckBoxInput作为(输入的)列表
末级
我的看法是:
@Modeltype SensibleScriptRunner.ParamViewModel
为每个参数指定值
@代码
使用(Html.BeginForm(“Index”,“Parameter”,FormMethod.Post))
@
参数表
@对于i=0到(Model.TextBoxInput.Count-1)
Dim迭代器=i
@EditorFor(函数(x)x.TextBoxInput(迭代器),“TextInput”)
下一个
@对于i=0到Model.DropdownListInput.Count-1
Dim迭代器=i
@EditorFor(函数(x)x.dropDownlinput(迭代器),“EnumInput”)
下一个
@对于i=0到Model.CheckBoxInput.Count-1
Dim迭代器=i
@EditorFor(函数(x)x.CheckBoxInput(迭代器),“CheckBoxInput”)
下一个
Html.EndForm()
终端使用
结束代码
其中一个编辑器模板的示例:
@modeltype SensibleScriptRunner.Input
@代码
@
@LabelFor(函数(v)v.value,Model.ParamName)
@
@Html.TextBoxFor(函数(v)v.value)
结束代码
当前FluentValidation代码:
导入FluentValidation
公共类ParamViewModelValidator
继承(ParamViewModel的)AbstractValidator
公共分新()
(函数(x)x.TextBoxInput)的规则。NotEmpty.[When](函数(x)不为空(x.TextBoxInput))
(函数(x)x.DropdownListInput)的规则。NotEmpty。[当](函数(x)不为空(x.DropdownListInput))
(函数(x)x.CheckBoxInput)的规则。NotEmpty。[当](函数(x)不为空(x.CheckBoxInput))
端接头
末级
我现在要做的是确认在我的每个列表中的每个对象中,它们都有一个不是空的值属性。我可以通过验证输入模型来实现这一点吗?现在,代码用于确认列表本身不是null,但是列表中的对象仍然可以包含所有null值。有没有一个简单的方法可以做到这一点
或者,我应该以不同的方式设置代码吗?好吧,我想出来了。对于任何好奇的人,我所要做的就是添加一个inputvalidator类
Imports FluentValidation
Public Class InputValidator
Inherits AbstractValidator(Of Input)
Public Sub New()
RuleFor(Function(x) x.value).NotEmpty()
RuleFor(Function(x) x.ParamName).NotEmpty()
RuleFor(Function(x) x.ParamType).NotEmpty()
End Sub
End Class
将此添加到我的输入模型解决了所有问题。我不确定代码实际上在哪里检查此验证(我的编辑器模板指向输入作为模型,这可能与此有关;也可能是当我的paramviewmodelvalidator检查列表是否有效时,它还检查该列表中每个对象的条件(我想它就是这个)。不管怎样,如果有人有类似的问题,这里有一个解决方案