我在寫一個DateValidator控件以充當日期的所有類型的驗證器。ASP.NET自定義服務器控件構建 - 驗證器
它將在客戶端用作日期比較的必需驗證器,最小/最大驗證器和範圍驗證器。
總而言之,我寫它,它的功能:在一個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>
正如你所看到的,只有驗證摘要被認可,而不是我的CustomValidator類繼承BaseValidator。如果我能解決它爲什麼能解決問題。令人沮喪。
您可以添加一個代碼段,在其中創建所需的span標籤嗎? – David 2009-11-12 15:05:02
這就是我要說的。 BaseValidator處理SPAN標記的呈現。創建組合控件時,我不需要像正常一樣重寫RenderChildControls。 SPAN標記由默認呈現,我不需要修改輸出HTML。 – Jonathan 2009-11-12 17:08:20