现在我有一个包含三个输入列表的视图模型;文本框输入、下拉列表输入和复选框输入。这些列表中的每一个都是输入对象的列表,其中包含四个值;参数、参数名称、参数类型和值。我正在使用这些输入列表在表单上生成可变数量的字段,具体取决于每个列表包含的对象数量。
我目前的问题是我不确定如何使用流利的验证来验证列表对象中的变量。我知道每个列表的行为在返回 Nothing 方面应该如何表现,但我不知道如何使用 FluentValidation 对该行为进行编码。
输入模型:
Public Class Input
Property value As String
Property ParamName As String
Property ParamType As String
Property ParamEnums As List(Of String)
End Class
参数视图模型:
Imports FluentValidation
Imports FluentValidation.Attributes
<Validator(GetType(ParamViewModelValidator))> _
Public Class ParamViewModel
Property TextBoxInput As List(Of Input)
Property DropdownListInput As List(Of Input)
Property CheckBoxInput As List(Of Input)
End Class
我的观点:
@Modeltype SensibleScriptRunner.ParamViewModel
<h2>Assign Values to Each Parameter</h2>
@Code
Using (Html.BeginForm("Index", "Parameter", FormMethod.Post))
@<div>
<fieldset>
<legend>Parameter List</legend>
@For i = 0 To (Model.TextBoxInput.Count - 1)
Dim iterator = i
@Html.EditorFor(Function(x) x.TextBoxInput(iterator), "TextInput")
Next
@For i = 0 To Model.DropdownListInput.Count - 1
Dim iterator = i
@Html.EditorFor(Function(x) x.DropdownListInput(iterator), "EnumInput")
Next
@For i = 0 To Model.CheckBoxInput.Count - 1
Dim iterator = i
@Html.EditorFor(Function(x) x.CheckBoxInput(iterator), "CheckBoxInput")
Next
<p>
<input type="submit" value="Query Server"/>
</p>
</fieldset>
</div>
Html.EndForm()
End Using
End Code
编辑器模板之一的示例:
@modeltype SensibleScriptRunner.Input
@Code
@<div class="editor-label">
@Html.LabelFor(Function(v) v.value, Model.ParamName)
</div>
@<div class="editor-field">
@Html.TextBoxFor(Function(v) v.value)
</div>
End Code
当前 FluentValidation 代码:
Imports FluentValidation
Public Class ParamViewModelValidator
Inherits AbstractValidator(Of ParamViewModel)
Public Sub New()
RuleFor(Function(x) x.TextBoxInput).NotEmpty.[When](Function(x) Not IsNothing(x.TextBoxInput))
RuleFor(Function(x) x.DropdownListInput).NotEmpty.[When](Function(x) Not IsNothing(x.DropdownListInput))
RuleFor(Function(x) x.CheckBoxInput).NotEmpty.[When](Function(x) Not IsNothing(x.CheckBoxInput))
End Sub
End Class
我目前要做的事情是确认在我的每个列表中的每个对象中,它们都具有一个不为空的 value 属性。我可以通过验证输入模型来做到这一点吗?现在,代码用于确认列表本身不为空,但列表中的对象仍然可以包含所有空值。有没有一种简单的方法可以做到这一点?
或者,我应该以不同的方式设置我的代码吗?