2010-03-31 131 views
0

我有幾個服務器控件實現了IValidator接口。因此,他們有自己的Validate()方法,看起來像這樣。IValidator.Validate方法並向自定義類型添加錯誤消息

public void Validate() 
{ 
    this.IsValid = true; 
    if (someConditionFails()) 
    { 
    ErrorMessage = "Condition failed!"; 
    this.IsValid = false; 
    } 
} 

據我所知,這些Validate()方法是保存按鈕的事件處理程序之前執行加載完成事件之前在回發執行。我想要做的是傳入一個自定義類的實例的引用,該實例收集可以從「保存」按鈕事件處理程序訪問的所有錯誤消息。

換句話說,我願做這樣的事情:

public void Validate(ref SummaryOfErrorMessages sum) 

我想我不能這樣做,因爲簽名是從什麼IValidator接口有不同。我能想到的另一個選項是Load Completed事件,我將遍歷頁面上的所有驗證器,獲取IsValid = false,並在那裏創建我的SummaryOfErrorMessages。這聽起來正確嗎?有沒有更好的方法來做到這一點?

回答

1

驗證完成後,我會遍歷頁面上的所有驗證器並獲取摘要。你可以從Page.Validators找到所有的驗證器。

作爲警告,請注意,僅使用IValidator並且不從BaseValidator繼承的驗證程序根本不支持驗證組,因此似乎不會從BaseValidator繼承有點不推薦。我被這一次咬了。

+0

@Matti - 感謝有關驗證組的說明。我創建了一個覆蓋的Page.Validate,它不僅抓取BaseValidators,還抓取IValidator。所以一切都很好。 我想我必須做一些像Page.Validators [x] .IsValid,然後相應地添加消息。不知何故,這感覺就像一個黑客。我想以某種方式將所有消息添加到各個IValidators中 – Nick 2010-03-31 21:48:29

相關問題