views:

978

answers:

6

I can't get this CustomValidator working.

In the <head>:

<script language="javascript" type="text/javascript">
  function ValidateFile(sender, args){
      alert("Hi");

      args.IsValid = document.getElementById("fuFile").value != "" || 
                     document.getElementById("c101_c7").value != "";
  }
</script>

In the body:

<asp:FileUpload ID="fuFile" runat="server" size="70"/>
<asp:TextBox ID="c101_c7" class="textbox" runat="server"/>
<asp:CustomValidator ID="vldFile" runat="server" ClientValidationFunction="ValidateFile"
    ErrorMessage="You must either upload a file or provide a URL of a file."></asp:CustomValidator>

What should be in the args.IsValid if either the FileUpload or TextBox has to be filled in?

+2  A: 

are you just using a normal button to trigger the validation?

Are you implementing validationgroups anywhere else in this code?

andy
Oh thank you! I didn't notice the button has a validation group.But I think I still got this part wrong. Do you know the correct way of doing it?args.IsValid = document.getElementById("fuFile").value != "" || document.getElementById("c101_c7").value != "";
A: 

You need to set the ControlToValidate Property on the custom validator. Currently the validator is not hooked up to any control.

Also, I'm sure you just didn't post this part of the markup, but you need to have a control that does a postback and causes validation as part of its postback. A button will work for this.

Daniel
A: 

I edited the question. The JavaScript wasn't called because of ValidationGroup of the button (thanks to Andy). But I still have problem with getting the values of .NET controls from the JavaScript

A: 

This works

document.getElementById("ctl00_ContentPlaceHolder1_fuFile").value
+3  A: 

I find it helpful to actually let the code behind tell your JavaScript code what the client-side ID of the control is, since it's possible it's different than what you would think (based on what ASP .NET decides to do):

document.getElementById('<%=fuFile.ClientID %>');
Brandon Montgomery
+1  A: 
<script type="text/javascript">
//<![CDATA[
    function validateField(sender, args) {        
        var regExp = /(^[a-zA-Z]{2,50})$/;
        var val = document.getElementById(sender.controltovalidate).value;
        args.IsValid = regExp.test(val);
}
//]]>
</script>
Hakan