2009-04-30 95 views
0

我有一個自定義控件,其中包含多個文本框字段和一個複選框。禁用必填字段驗證器複選框的服務器端被選中

如果複選框被選中,並且用戶提交表單,如果文本框是空的(並且複選框被選中),我需要允許它們繼續。

我必須在沒有javascript的情況下執行此操作。

問題是,在自定義控件的OnInit事件中,我連接了文本框及其驗證程序,我無法訪問該複選框的值。


我一直在試圖重寫複選框,以便在自定義控件的事件OnInit的我可以禁用所需fieldvalidators如果this.Context.Request.Form [「CheckboxId」] =「開」 UNIQUEID,但只要我覆蓋複選框viewstate的uniqueID停止工作。

我想到的另一件事是擁有一個自定義的requiredfieldvalidator,該構造函數使用複選框,如果該值爲false,則被禁用。

回答

1

您是否嘗試過通過覆蓋Control.OnLoad方法代替Control.Load事件期間執行控制初始化邏輯?
在控制生命週期的這個階段,您應該能夠訪問CheckBox的值。

作爲一個方面說明,如果您想禁用驗證,您不一定必須禁用所有驗證程序控件。相反,您可以簡單地將Button.CausesValidation屬性設置爲假按鈕將提交表單。

UPDATE:
聽起來好像要構建用戶控制,即由作爲一個單元一起工作簡單的控制的集合體的複雜的控制。
如果你想完全用代碼完成這項工作,就像使用自定義控件一樣,你應該繼承CompositeControl類。這給你兩全其美。子控件的初始化是通過覆蓋CreateChildControls方法來完成的。

+1

你有鏈接到一篇文章,描述如何做到這一點?我見過的所有示例都使用OnInit在自定義控件中添加控件。 – 2009-04-30 17:50:43