2010-05-20 11 views
3

對於ASP.NET驗證器控件,我希望將用戶體驗和服務器端驗證的客戶端驗證都用於警惕黑客。 ASP.NET文檔使我相信,如果EnableClientScript =「True」,那麼如果客戶端驗證可能用於用戶代理,則不會有服務器端驗證。要獲得服務器端驗證,文檔中提到使用EnableClientScript =「False」,它完全繞過了客戶端驗證。ASP.NET:如何將相同的驗證器控件同時作爲客戶端和服務器端

我誤解了驗證控件是如何工作的?我問,因爲很顯然,很多開發人員都希望將客戶端和服務器端驗證結合在一起,並且我發現很難相信這兩者在一起使用標準驗證控件時是不可能的。

如果我理解正確的ASP.NET文件,然後我能找到的只有兩個選擇:

  1. 使用兩驗證控件除了他們的ID和EnableClientScript性質完全一樣。顯然,維護兩個控件幾乎是一樣的醜陋。

  2. 在後面寫一些代碼來檢查postback,然後在驗證器組上調用Validate方法。爲什麼要在代碼中使用自動控制的方式來編寫代碼?

有沒有辦法做到這一點,使用一個驗證控件沒有代碼後面?

在此先感謝您的意見。

回答

3

服務器端驗證將始終發生,因此您不必擔心它。唯一的解決辦法是使用CustomValidator或從BaseValidator創建您自己的驗證器類,它們不會執行任何服務器端任何操作。

默認情況下,服務器端驗證發生在Page_Load()之後和任何觸發事件(例如按鈕單擊)之前。然而,在你的Page_Load()中,你可以強制一個Page.Validate()。驗證發生後,您可以檢查Page.IsValid屬性。我建議你閱讀ASP.NET Validation in Depth。此外,這不是你要求的,但是你理解page lifecycle and ViewState(如果你不使用MVC)是基本的。幾乎所有你會遇到的使用它。

+0

感謝您的快速響應。我希望是這樣。 – harrije 2010-05-20 17:48:31

+0

@harrije〜如果尼爾森的評論是答案,不要忘記將他的問題標記爲答案。這讓其他人知道你已經完成了這個問題。歡迎! – jcolebrand 2010-05-20 17:51:34

+0

@drachenstern:感謝您的幫助,但也請記住,您不能立即接受答案。 :) – 2010-05-20 17:53:16

0

您誤解了驗證器的工作方式。你總是得到服務器驗證,位客戶端驗證是可選的。唯一的例外是自定義驗證器,如果你不想做任何事情你不需要做任何事情。

0

使用ASP驗證在您的標記,然後在回發執行以下操作:

Page.Validate() 
if(Page.isValid) 
{ 
    // Validation passed 
} 
0

根據這一Microsoft sourceWeb窗體頁框架始終在服務器上進行驗證,即使確認有已經在客戶端上執行。「

關於如何在ASP.Net 2.0中實現驗證控件還有更多的信息。據推測,在隨後的ASP.Net版本中基本行爲沒有改變。

相關問題