2010-01-04 246 views
6

我有一個ASP.NET網絡表格,我想驗證客戶端和服務器端,使用相同的驗證控件。 我似乎無法找到解決方案 - 客戶端驗證很好,但是當我禁用JavaScript - 它忽略驗證。ASP.NET驗證服務器端

幫助將不勝感激。

羅馬

+0

你能不能給我們更多的信息?具體來說,你使用了什麼驗證控件?內置的ASP.NET驗證器?如果是這樣,那麼您正在使用哪些(例如CustomValidator)。有些代碼片段總是有幫助的。最後,你使用更新面板或任何AJAX-Y? – 2010-01-04 17:33:41

+0

使用常規驗證器,完全沒有CustomValidator。 沒有AJAXy,沒有面板...什麼都沒有。只是一個普通的形式:) – Roman 2010-01-04 18:23:08

回答

9

您可以隨時通過validator1.Validate()方法,它會做服務器端的比較觸發驗證。檢查Page.IsValid以查看服務器端驗證是否未執行?我想你可以通過Page.Validate()來調用它。

HTH

15

顯式調用服務器端Page.Validate()

或超載的Page.Validate(string)定位您的驗證組之一。

更新:

我忘了,你運行驗證(..)之後,檢查Page.IsValid property - 這取決於你從當這個屬性== false停止提交頁面。

+0

嗨, 我試過這個 - 但仍然沒有工作。 我使用常規的asp.net驗證器。即使不是自定義的。 當我禁用JavaScript - 它只是通過,即使我明確使用Page.Validate(); – Roman 2010-01-04 18:22:11

+0

嗯......如果你還沒有,嘗試重載的版本。 否則,您從哪個方法或事件中調用Page.Validate? – 2010-01-04 18:32:44

+0

忘記了Page.IsValid,我錯過了那條船。 – 2010-01-04 18:38:37

3

如果您使用的是標準驗證控件,即使指定了客戶端驗證,也會始終在服務器上重新驗證數據。

見注意本文中圖2 :,它說之後:

仔細檢查客戶端驗證

一個有趣的一點是,即使 雖然表單數據進行驗證的 客戶端(不需要 附加請求,並從服務器響應 驗證數據), 輸入的數據在 服務器上重新驗證。在 客戶端上檢查數據並發現有效後,使用相同的 驗證規則在服務器上重新檢查 。這些規則 你建立,以確保對某些 棘手的程序員在那裏試圖 繞過驗證過程 張貼頁面到服務器,就好像 它通過驗證。

http://msdn.microsoft.com/en-us/library/aa479013.aspx

但是,您可以通過調用Page.Validate()

3

羅馬迫使服務器上驗證,

可以使用ASP.net自定義驗證同時提供客戶端和服務器方法進行驗證。這樣,如果你禁用了js,你仍然應該使用服務器驗證方法。在這個例子中,「ClientValidate」函數將被定義在頁面上的JavaScript塊中,並且「ServerValidate」函數將存在於代碼隱藏文件中。

<asp:textbox id="textbox1" runat="server"> 
<asp:CustomValidator id="valCustom" runat="server" 
    ControlToValidate="textbox1" 
    ClientValidationFunction="ClientValidate" 
    OnServerValidate="ServerValidate" 
    ErrorMessage="*This box is not valid" dispaly="dynamic">* 
</asp:CustomValidator> 
+0

所有ASP.NET驗證程序都提供客戶端和服務器端驗證 - 不僅僅是CustomValidator。 – 2010-01-04 17:46:25

0

找到答案! 答案是使用Page.Validate(),然後檢查Page.IsValid以檢查驗證是否有效。 只有使用Page.Validate()沒有幫助 - 代碼繼續,並沒有停止。

謝謝你們, 羅馬