2012-05-31 47 views
0

現在我有一個viewmodel包含三個輸入列表; textboxinput,dropdownlistinput和checkboxinput。每個列表都是輸入對象的列表,其中包含四個值;參數,參數名稱,參數類型和值。我使用這些輸入列表來根據每個列表包含多少個對象在窗體上生成可變數量的字段。FluentValidation與對象列表

我目前的問題是,我不知道如何通過流利的驗證來驗證列表對象中的變量。我知道每個列表的行爲應該如何處理,而我不知道如何使用FluentValidation編寫該行爲。

輸入模型:

Public Class Input 
    Property value As String 
    Property ParamName As String 
    Property ParamType As String 
    Property ParamEnums As List(Of String) 
End Class 

ParamViewModel:

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.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 

@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 

的編輯器模板實例一3210

當前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 

我想的事情現在要做的是確認在每個我的列表中的每個對象,他們都有一個值的屬性,也並非一無是處。我可以通過驗證輸入模型來做到這一點嗎?現在,代碼用於確認列表本身不爲空,但列表中的對象仍然可以包含所有空值。有沒有一個微不足道的方法來做到這一點?

另外,我應該不同地設置我的代碼?

回答

1

嗯,我想通了。對於任何好奇的人,我只需要添加一個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檢查列表是否有效時,它也檢查列表中每個對象的標準(我認爲這是一個))。無論如何,如果任何人有類似的問題,這裏有一個解決方案。