0

我第一次使用ValidationProvider控件。我試圖模仿我在EntityQuickStart解決方案示例中看到的功能,並且EntLib安裝附帶了有限的成功。企業庫4.0 ValidationProvider自我驗證問題

雖然我是能夠得到形式ErrorProvider控件圖標出現基於與驗證裝飾BO屬性的業務對象驗證屬性,如:

<NotNullValidator(MessageTemplate:="Gender must be specified.", RuleSet:="MyRule", Tag:="Gender")> _ 
     Public Shadows Property Gender() As String 
     Get 
      Return MyBase.Gender 
     End Get 
     Set(ByVal value As String) 
      MyBase.Gender = value 
     End Set 
    End Property 

但是,如果我想編輯添加到「 SelfValidation「方法,我如何將結果綁定到表單控件?

(In Self Validation) 

If Me.Attornet s Nothing Then 
    Dim result As New ValidationResult("Attorney selection is required", Me, Nothing, Nothing, Nothing) 
    results.AddResult(result) 
End If 

,或者必須通過我自己的**自定義驗證創建「,然後使用它的類型來裝飾業務對象屬性

編輯:??

如果ValidationProvider控制並不打算用於交叉控制驗證像這樣的:如果用戶選擇的單選按鈕組中對應於商業選項屬性Customer.DoYouSmokeCrack由於布爾則「是」選項

應使用ErrorProvider圖標標記txtHowMuch控件,指示該字段是有條件需要的。

我現在正在這樣做的方式是在自我驗證塊中完成此操作,並且當我將一個ValidationResult對象添加到集合中時,我將Key屬性設置爲「Explanation」,以便GUI可以使用它來手動映射到有問題的屏幕控制。

有沒有更標準/更有效的方法來做到這一點?

回答

2

使用ValidationProvider不能使用自我驗證(或任何其他交叉屬性驗證)。它不會工作,因爲ValidationProvider工作沒有業務對象的存在。它所做的是加載爲單個屬性定義的所有驗證,並使用這些驗證檢查給定控件的值。

交叉屬性驗證,如自定義驗證器和自我驗證確實需要完全初始化的業務對象才能工作。

如果驗證很簡單並驗證一個屬性(不需要執行其他任何操作(例如進入數據庫等)),則可以編寫自定義驗證屬性以進行驗證。在所有其他情況下,您應該做的是在用戶點擊「保存」(您可能會做的任何事)之後創建業務對象,並在該點驗證對象。換句話說,你延遲驗證,直到用戶提交他的更改。