2009-01-06 61 views
2

我已經使用ValidatorEnable在JavaScript中禁用RequiredFieldValidator。但是,在回發中,驗證器驗證的控件仍然有效,即使我禁用了客戶端上的驗證器。ASP.NET - 如何阻止不需要的服務器驗證

我明白爲什麼,因爲我只禁用客戶端驗證這種情況發生......但有一個很好的方法來確定我已經禁用了客戶端驗證然後停用上發的服務器驗證?

+1

如果你禁用它,爲什麼你需要一個RequiredFieldValidator? – 2009-01-06 16:01:50

+1

,因爲我隱藏了客戶端頁面的元素 - 並且這些元素包含驗證器。我隱藏這些元素時禁用驗證器客戶端。然後,當我回發我得到服務器驗證問題,因爲它不知道我什麼時候禁用。 – Peanut 2009-01-06 16:05:02

回答

0

花生,我剛剛列出了同樣的問題,你是。在客戶端,我有JavaScript,根據用戶界面中的選擇禁用必需的字段驗證器。但是,服務器端驗證仍在觸發。

負荷期間,我用我的Javascript相同的規則加入到禁用我的驗證的方法。就我而言,它取決於用戶的選擇一個單選按鈕:

this.requiredValidator.Enabled = this.myRadioButton.Checked; 

這似乎在第二頁負荷工作,但不是第一個。調試完成後,我發現在這行發射時,錯誤的單選按鈕被認爲是被檢查的。視圖狀態/發佈數據在我檢查禁用驗證器時未應用於控件。我在加載過程中放置​​這個的原因是爲了確保在啓動之前禁用了驗證器。

因此,解決方案似乎是有一些像上面後的ViewState行,但在此之前的驗證。

重載validate()方法,因爲palehorse建議,工作,讓我保證基於用戶的當前選擇的服務器端驗證被啓用/禁用。

2

從您的問題中不清楚,您禁用了什麼。 RequiredFieldValidator具有Enabled和EnableClientScript屬性。

如果要禁用客戶端和服務器上的驗證,則應將Enabled設置爲false。

要僅禁用客戶端,請將EnableClientScript設置爲false。

3

你可以,當你禁用客戶端驗證(推測可能與使用JavasScript?),也是一個隱藏的輸入,你可以在頁面加載方法查詢設置值。通過這種方式,您可以檢查隱藏輸入的值(通過Request.Form {]數組),以在驗證事件觸發之前禁用服務器端的驗證器。

另一種選擇是覆蓋頁validate()方法來禁用基於該把它們藏在客戶端相同的規則的驗證。