2010-07-13 103 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 - 感谢@马克布拉克特

对不起,打扰你们!