2010-07-13 100 views
4

我有以下問題:的CustomValidator與服務器端驗證只

上有許多頁驗證,所有的人,除了一個同時擁有客戶端和服務器端驗證。其中一個只有服務器端驗證。

問題:

我的網頁被張貼甚至一些客戶端驗證是無效的。我認爲它應該首先驗證客戶端,當一切都好的時候,它應該檢查服務器端。

代碼:

的js部分:

 var hash = { 
      '.jpg' : 1, 
      '.jpeg' : 1, 
      '.bmp' : 1, 
      '.png' : 1 
     }; 
     function FileExtension(obj, args) { 
      var file = '<%=UploadFoto_FileUpload.ClientID %>'; 
      var re = /\..+$/i; 
      var ext = $("#" + file).val().match(re); 
      if (ext != undefined) { 
       ext = ext.toLowerCase(); 
       if (hash[ext]) { 
        args.IsValid = true; 
       } else { 
        args.IsValid = false; 
       } 
      } 
      else { 
       args.IsValid = false; 
      } 
     } 
     function Validator2(obj, args){ 
      args.IsValid = true; 
     } 

asp.net部分:

   <asp:CustomValidator ID="UploadFoto_FileUpload_CustomValidator1" ErrorMessage="Ext error" ClientValidationFunction="FileExtension" OnServerValidate="UploadFoto_FileUpload_CustomValidator1_ServerValidate" Display="Dynamic" runat="server" /> 
       <asp:CustomValidator ID="UploadFoto_FileUpload_CustomValidator2" ErrorMessage="De foto is te groot (maximaal 6mb)" ClientValidationFunction="Validator2" OnServerValidate="UploadFoto_FileUpload_CustomValidator2_ServerValidate" Display="Dynamic" runat="server" /> 

       <asp:FileUpload ID="UploadFoto_FileUpload" CssClass="uploadField" runat="server" /> 

       <asp:ImageButton ID="Submit_ImageButton" ImageUrl="../Images/btn-verzenden.png" AlternateText="Verzenden" CssClass="verzendenBtn" OnClick="Submit_ImageButton_Click" runat="server" /> 

經過進一步的測試,我發現,如果是甚至只有他們第一次有 - UploadFoto_FileUpload_CustomValidator1存在相同的場景:

當上傳文件被佔用y,則顯示分機錯誤頁面沒有被公佈

當選擇文件,但轉錯了則顯示分機錯誤頁面沒有被公佈

當選擇與正確的分機文件,那麼錯誤信息沒有顯示,但表格正在發佈,即使有其他驗證器有錯誤

+5

嗨,觸發客戶端驗證的按鈕應該有相同的驗證組。你可以請添加一些你的html,所以我們可以看到問題的位置? – user29964 2010-07-13 09:03:08

+0

頁面上只有一個組,此驗證程序與FileUpload控件連接 – awattar 2010-07-13 09:22:45

+1

如果向我們顯示您的html,仍然更容易。你可以在這裏找到一個非常乾淨的示例,用於使用驗證器:http://www.dotnet-guide.com/validationgroups.html – user29964 2010-07-13 09:30:16

回答

0

這是驗證如何工作,如果您可以回發頁面沒有一些客戶端驗證程序觸發然後按鈕或鏈接或任何火災回發是要麼在沒有觸發的驗證器的驗證組中,或者它的CausesValidation設置爲false。

1

我相信驗證會觸發所有的驗證器 - 這樣您就不會在討厭下一個錯誤/必填字段時感到惱人的用戶體驗。

假設你不能寫一個有意義的客戶端腳本,只需假裝它並返回它在客戶端有效。您的服務器端邏輯將檢查實際規則,但如果其他valydator失敗,則使用客戶端代碼將阻止它回發。

0

您沒有設置驗證組

+0

通常當頁面上只有一個組時,就不需要了。 – awattar 2010-07-13 11:51:44

+0

這是真正的awattar,但也許你想嘗試它。 – user29964 2010-07-13 13:21:31

+0

不,它不是組的問題 – awattar 2010-07-13 15:19:30

0

應該只發布回來時,所有的客戶端驗證返回true,你確定這是使用alert(args.IsValid);的情況?

順便說一句,你可以使用一個RegularExpressionValidator做乾淨的文件擴展名驗證:整天這方面的工作後

<asp:RegularExpressionValidator runat="server" ErrorMessage="Only JPEG, GIF, and PNG files are allowed!" ValidationExpression="^.*\.(jpg|JPG|jpeg|JPEG|gif|GIF|png|PNG)$" ControlToValidate="UploadFoto_FileUpload">*</asp:RegularExpressionValidator> 
+0

它似乎是如果有CustomValidator over FileUpload表單正在發佈後選擇文件即使有其他驗證器與客戶端驗證。 – awattar 2010-07-13 19:45:48

1

對不起傢伙,我弄清楚這是兩件事情的組合:

  1. 奇怪的js行爲ext = ext.toLowerCase();應該是ext = ext.toString().toLowerCase();因爲匹配返回這個作爲對象類型不是字符串(因爲我假設)所以toLowerCase不能用於此對象。
  2. 第二件事情是缺少啞(巫設置isvalid爲true)客戶端驗證功能的其他customvalidators - 感謝@馬克布拉克特

對不起,打擾你們!