asp.net date validation with three drop down list
i have three drop down list for day month and year now i want to validate this selected date in asp.net using javascript开发者_如何学编程 or inbuild asp.net validation control.
thanks......
This is a java script code for validate date format :
<script language="javascript" type="text/javascript">
function ValidateDate(args)
{
var date=args.Value;
var arr=date.split('/');
if(arr.length!=3)
{
args.IsValid=false;
return;
}
var day;
if(arr[1]=='08')
{
day=parseInt('8');
}
else if(arr[1]=='09')
{
day=parseInt('9');
}
else
{
day=parseInt(arr[1]);
}
var month;
if(arr[0]=='08')
{
month=parseInt('8');
}
else if(arr[0]=='09')
{
month=parseInt('9');
}
else
{
month=parseInt(arr[0]);
}
var year=parseInt(arr[2]);
var boolday=false;
var boolmonth=false;
var boolyear=false;
if(!isNaN(year))
{
if(1800<year&&year<2100)
{
boolyear=true;
}
}
if(!isNaN(month))
{
if(0<month&&month<13)
{
boolmonth=true;
}
}
if(!isNaN(day))
{
var val=32;
if(boolmonth)
{
if(month==2)
{
if(boolyear)
{
if(year%4==0)
{
val=30;
}
else
{
val=29;
}
}
}
else if(month==4||month==6||month==11||month==9)
{
val=31
}
}
if(0<day&&day<val)
{
boolday=true;
}
}
if(boolyear&&boolmonth&&boolday)
{
args.IsValid=true;
}
else
{
args.IsValid=false;
}
}
</script>
And you can validate date entered in the 3-DropDownList by concatinate the 3 values and passing it to the function
Using a custom validator:
protected void dobCustomValidator_ServerValidate(object sender, ServerValidateEventArgs e)
{
CustomValidator validator = (CustomValidator) sender;
ddlDateofBirthDay = (DropDownList)validator.Parent.FindControl("ddlDateofBirthDay");
ddlDateofBirthMonth = (DropDownList)validator.Parent.FindControl("ddlDateofBirthMonth");
ddlDateofBirthYear = (DropDownList)validator.Parent.FindControl("ddlDateofBirthYear");
if (ddlDateofBirthDay.SelectedIndex == 0 || ddlDateofBirthMonth.SelectedIndex == 0 ||
ddlDateofBirthYear.SelectedIndex == 0)
{
e.IsValid = false;
}
else
{
string dateOfBirthString = ddlDateofBirthDay.SelectedItem.Value + "/" + dateTools.MonthNumber(ddlDateofBirthMonth.SelectedItem.Value) +
"/" + ddlDateofBirthYear.SelectedItem.Value;
try
{
DateTime.Parse(dateOfBirthString, Culture);
}
catch
{
e.IsValid = false;
}
}
}
See below. The main function is isDate to which you can pass day, month and year. These are javascript functions, so it alerts a relevant message and returns false.
The daysInFebruary will calculate the number of days for feb for the year passed.
The DaysArray keeps an array of the number of days for each month.
var minYear=1900;
var maxYear=2100;
function daysInFebruary (year){
// February has 29 days in any year evenly divisible by four,
// EXCEPT for centurial years which are not also divisible by 400.
return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
for (var i = 1; i <= n; i++) {
this[i] = 31
if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
if (i==2) {this[i] = 29}
}
return this
}
function isDate(strDay,strMonth,strYear ){
var daysInMonth = DaysArray(12)
if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
for (var i = 1; i <= 3; i++) {
if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
}
month=parseInt(strMonth)
day=parseInt(strDay)
year=parseInt(strYr)
if (strMonth.length<1 || month<1 || month>12){
alert("Please enter a valid month")
return false
}
if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
alert("Please enter a valid day")
return false
}
if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
return false
}
return true
}
// validate that the user made a selection other than default
function isChosen(select) {
if (select.selectedIndex == 0) {
alert("Please make a choice from the list.");
return false;
} else {
return true;
}
}
function daysInFebruary (year){
// February has 29 days in any year evenly divisible by four,
// EXCEPT for centurial years which are not also divisible by 400.
return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
for (var i = 1; i <= n; i++) {
this[i] = 31
if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
if (i==2) {this[i] = 29}
}
return this
}
function focusElement(formName, elemName) {
var elem = document.forms[formName].elements[elemName];
elem.focus();
elem.select();
}
function valid(dob1,dob2,dob3){
var daysInMonth = DaysArray(12)
var date=dob1.value
var month=dob2.value
var year=dob3.value
if((month==2 && date>daysInFebruary(year)) || date>daysInMonth[month]){
alert("Please enter a valid day")
return false
}
return true
}
function validateForm(form) {
if (isChosen(form.dob1)) {
if (isChosen(form.dob2)) {
if (isChosen(form.dob3)) {
if(valid(form.dob1,form.dob2,form.dob3)){
document.frm.action="<%=contextPath%>/Conformation";
//"conformation" is for servelet mapping
document.frm.submit();
}
}
}
}
return false;
}
</script>
<script language="javascript">
function gotoAddResourceAction()
{
validateForm(document.frm)
}
</script>
</head>
<body>
<form name="frm" method="post">
<table width="100%" id='table1' border="0" cellspacing="2" cellpadding="2">
<tr><td width="40%" class="txt-label">
<SPAN CLASS="txt-label">Date Of Birth (DOB)</SPAN><font color='red'> *</font>:
</td>
<td width="60%" class="txt-lable">
<Select name="dob1"><option value="" selected>Date</option>
<option value="1" >1</option><option value="2" >2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select>
<Select name="dob2"><option value="" selected>Month</option>
<option value="1" >January</option><option value="2" >February</option><option value="3">March</option><option value="4">April</option><option value="5">May</option><option value="6">June</option><option value="7">July</option><option value="8">August</option><option value="9">September</option><option value="10">October</option><option value="11">November</option><option value="12">December</option></select>
<Select name="dob3"><option value="" selected>Year</option>
<option value="1950" >1950</option><option value="1951" >1951</option><option value="1952">1952</option><option value="1953">1953</option><option value="1954">1954</option><option value="1955">1955</option><option value="1956">1956</option><option value="1957">1957</option><option value="1958">1958</option><option value="1959">1959</option><option value="1960">1960</option><option value="1961">1961</option><option value="1962">1962</option><option value="1963">1963</option><option value="1964">1964</option><option value="1965">1965</option><option value="1966">1966</option><option value="1967">1967</option><option value="1968">1968</option><option value="1969">1969</option><option value="1970">1970</option><option value="1971">1971</option><option value="1972">1972</option><option value="1973">1973</option><option value="1974">1974</option><option value="1975">1975</option><option value="1976">1976</option><option value="1977">1977</option><option value="1978">1978</option><option value="1979">1979</option><option value="1980">1980</option><option value="1981">1981</option><option value="1982">1982</option><option value="1983">1983</option><option value="1984">1984</option><option value="1985">1985</option><option value="1986">1986</option>
<option value="1987">1987</option><option value="1988">1988</option><option value="1989">1989</option><option value="1990">1990</option><option value="1991">1991</option><option value="1992">1992</option><option value="1993">1993</option><option value="1994">1994</option><option value="1995">1995</option><option value="1996">1996</option><option value="1997">1997</option><option value="1998">1998</option><option value="1999">1999</option><option value="2011">2011</option></select>
</td></tr>
<table width="100%" border="0" align="center">
<tr><td>
<input type="button" name="SubmitForm" value="Submit" class="button" onMouseOver=(this.className='buttonover') onMouseOut=(this.className='button') onClick="gotoAddResourceAction()">
</td></tr>
</table>
You could use JavaScript to load a hidden input with the value of the three dropdowns on the change event ie
hidDate.value = ddlDay.value + "/" + ddlMonth.value + "/" ddlYear.value;
Then use a compare validation control with the dataType set to DateTime validating the hidden input. You'll want to make sure that you the drop downs for values and only concat the /'s when needed.
(Note: This is for concept only and not going to be syntactically correct)
精彩评论