Link to home
Start Free TrialLog in
Avatar of DerekWatling
DerekWatlingFlag for South Africa

asked on

Date validation in ASP.NET 2.0

What is the best way to validate a date in ASP.NET 2.0? I have a TextBox control and want the date to be entered as yyyy/mm/dd and check that it is a valid date. I have been trying to use the AJAX MaskedEditExtender and MaskedEditValidator, but can't get this to work.

<asp:TextBox ID="tbDate" runat="server" />
<cc1:MaskedEditExtender ID="meeDate" runat="server" TargetControlID="tbDate" Mask="9999/99/99" MaskType="Date" CultureName="en:za" />
<cc1:MaskedEditValidator ID="mevDate" runat="server" ControlToValidate="tbDate" ControlExtender="meeDate" Text="Invalid date" Display="Dynamic"></cc1:MaskedEditValidator>

can anyone help or suggest a better method?
ASKER CERTIFIED SOLUTION
Avatar of Dirk Haest
Dirk Haest
Flag of Belgium image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Extend it to this:
<asp:TextBox ID="tbDate" runat="server" />
<cc1:MaskedEditExtender ID="meeDate" runat="server" TargetControlID="tbDate" Mask="9999/99/99" MaskType="Date" CultureName="en:za" />
<cc1:MaskedEditValidator ID="mevDate" runat="server" ControlToValidate="tbDate" ControlExtender="meeDate"  ClientValidationFunction="checkDate"
Text="Invalid date" Display="Dynamic"></cc1:MaskedEditValidator>

And add this function:
<script type="text/javascript">
function checkDate(source, clientside_arguments){        
  var checkDate = new Date(clientside_arguments.Value );
  clientside_arguments.IsValid=true;
  var dPart = clientside_arguments.Value.split("/");
  if(dPart[0]!=checkDate.getFullYear() ||
     dPart[1]!=checkDate.getMonth()+1 ||
     dPart[2]!=checkDate.getDate()){
       clientside_arguments.IsValid=false;
   }
}
</script>




Avatar of DerekWatling

ASKER

The MaskedEditExtender/Validator were doing too many strange things. Have ended up writing my own JavaScript onfocus and onblur functions that do what I want.