ASP.NET自定义服务器控件构建 - 验证器

时间:2009-11-12 14:56:06

标签: asp.net controls composite validation

我正在编写一个DateValidator控件,以作为日期的所有类型的验证器。

它将作为必需的验证器,最小/最大验证器和范围验证器,用于客户端的日期比较。

总而言之,我已经编写了它并且它的功能:在ASPX页面中。

出于某种原因,当将其添加到ASCX用户控件中以用作模板时,它不会呈现所需的<span>标记,因此在检查以确保控件存在之前生成JavaScript空引用验证仍在继续。

我的类继承BaseValidator,因此不会override RenderChildControls,因为我不需要修改输出。要添加我的自定义javascript,我使用OnPreRender方法将RegisterExpandoAttributes方法用于控件,但由于控件(span标记)从未呈现,因此无法在ASCX中触发。

有没有人遇到过这个问题,如果有的话,你做了什么来修复它?

编辑:

好的,又过了3个小时,我注意到一条非常重要的缺失: 在ASPX页面内运行时,它出现在HTML:

<script type="text/javascript">
//<![CDATA[
var Page_ValidationSummaries =  new Array(document.getElementById("cal"));
var Page_Validators =  new Array(document.getElementById("valTest"));
//]]>
</script>

但是在ASPX中的ASCX用户控件中:

<script type="text/javascript">
//<![CDATA[
var Page_ValidationSummaries =  new Array(document.getElementById("uc1_cal"));
//]]>
</script>

如您所见,仅识别验证摘要,而不是继承自BaseValidator的CustomValidator类。如果我能解决它为什么会解决问题。令人沮丧。

2 个答案:

答案 0 :(得分:1)

也许您应该考虑使用Excentrics World's free calendar popup。我认为它具有您描述的所有功能,并且已经构建完毕。

答案 1 :(得分:0)

如果您使用的是模板,请调用InstantiateIn()方法....