日期验证程序自定义网页控件

分享于 

6分钟阅读

Web开发

  繁體 雙語

介绍

使用. NET 提供的验证器是检查和验证用户在web窗体上进行操作之前的良好工具。 不幸的是,一些every-day-useful验证器丢失了。"。"。尽管有些帮助可以能来自 web ( 你可以找到 复选框CheckBoxList 验证器),它完全验证了用户( 没有组合框) 手动插入的日期,但仍然缺少。 DateValidator 控制这里间隙已经被填充。 用户可以在普通文本框中插入日期,这就是: 在下载源代码后,你必须在下载项目后将源代码添加到项目中,这样才能验证它的输入是否正确。 现在你可以编译,以便获得一个 DLL。 现在,你可以在项目( 你还可以将它添加到工具箱) 中包含web控件,然后按照常规方式对控件进行 register 操作:


<%@ Register TagPrefix="dgw" 



  Namespace="Doing.General.WebControls.Validators" 



  Assembly="Doing.WebControls" %>



然后选择要绑定的控件,作为通常的验证程序。


<asp:textbox id="txtBirth" runat="server" cssclass="TEXT1"/>


<dgw:datevalidator 



    id="dvBirth" 



    runat="server" 



    display="Dynamic" 



    controltovalidate="txtBirth" 



    errormessage="Date not valid"/>



这里控件实际上继承自 BaseValidator 所以,你有所有的方法和属性。 从你的技术角度来看,最有趣的可能是 ClientScript 函数,其中生成了执行客户端导航所需的JavaScript代码:


protected void ClientScript() {


 this.Attributes["evaluationfunction"] = "doingValidateDate";



 StringBuilder validatorScript = new StringBuilder();


 validatorScript.Append("<script language="""javascript">");


 validatorScript.Append("r");


 validatorScript.Append("function doingValidateDate(val) {");


 validatorScript.Append("r");


 validatorScript.Append("var oDate = 


 document.all[val.controltovalidate];");


 validatorScript.Append("r");


 validatorScript.Append("var sDate = oDate.value;");


 validatorScript.Append("if (sDate =="") return true;");


 validatorScript.Append("r");


 validatorScript.Append("var iDay, iMonth, iYear;");


 validatorScript.Append("r");


 validatorScript.Append("var arrValues;");


 validatorScript.Append("r");


 validatorScript.Append("var today = new Date();");


 validatorScript.Append("r");


 validatorScript.Append("arrValues = sDate.split("/");");


 validatorScript.Append("r");


 validatorScript.Append("iDay = arrValues[0];");


 validatorScript.Append("r");


 validatorScript.Append("iMonth = arrValues[1];");


 validatorScript.Append("r");


 validatorScript.Append("iYear = arrValues[2];");


 validatorScript.Append("r");


 validatorScript.Append


 ("if ((iMonth == null) || 


 (iYear == null)) return false;");


 validatorScript.Append("r");


 validatorScript.Append


 ("if ((iDay> 31) || (iMonth> 12) 


 || (iYear <1900 || 


 iYear> today.getFullYear())) return false;");


 validatorScript.Append("r");


 validatorScript.Append


 ("var dummyDate = new Date(iYear, iMonth - 1, iDay);");


 validatorScript.Append("r");


 validatorScript.Append


 ("if ((dummyDate.getDate()!= iDay) || 


 (dummyDate.getMonth()!= iMonth - 1) || 


 (dummyDate.getFullYear()!= iYear)) return false;");


 validatorScript.Append("r");


 validatorScript.Append("return true;");


 validatorScript.Append("r");


 validatorScript.Append("}");


 validatorScript.Append("r");


 validatorScript.Append("</script>");


 this.Page.RegisterClientScriptBlock


 ("doingValidateDate", validatorScript.ToString());


}



编译并处理这里代码后,将生成这里JavaScript代码:


<script language="javascript">


function doingValidateDate(val) {


 var oDate = document.all[val.controltovalidate];


 var sDate = oDate.value;


 if (sDate == "") return true;


 var iDay, iMonth, iYear;


 var arrValues;


 var today = new Date();


 arrValues = sDate.split("/");


 iDay = arrValues[0];


 iMonth = arrValues[1];


 iYear = arrValues[2];


 if ((iMonth == null) || (iYear == null)) return false;


 if ((iDay> 31) || (iMonth> 12) || 


 (iYear <1900 || iYear> today.getFullYear())) 


 return false;


 var dummyDate = new Date(iYear, iMonth - 1, iDay);


 if ((dummyDate.getDate()!= iDay) || 


 (dummyDate.getMonth()!= iMonth - 1) || 


 (dummyDate.getFullYear()!= iYear)) 


 return false;


 return true;


}


</script>



改进

当然,这个验证器可以改进很多。 最有用的功能可能是检查有效范围的能力,以及支持更多日期格式( 比如 )的可能性: MM/dd/yyyy 或者 yyyy/mm/dd)

尊称

我必须感谢 Donny Mack编写了一个出色的教程 [ ^ ] that帮助我理解和构建这个web用户控件。


相关文章