2009-11-12 130 views
0

我在寫一個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。如果我能解決它爲什麼能解決問題。令人沮喪。

+1

您可以添加一個代碼段,在其中創建所需的span標籤嗎? – David 2009-11-12 15:05:02

+0

這就是我要說的。 BaseValidator處理SPAN標記的呈現。創建組合控件時,我不需要像正常一樣重寫RenderChildControls。 SPAN標記由默認呈現,我不需要修改輸出HTML。 – Jonathan 2009-11-12 17:08:20

回答

0

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

+0

ASCX控件正在被用作可反覆重複使用的模板。它沒有實現ITemplate。 – Jonathan 2009-11-12 17:07:18

1

也許你應該考慮使用Excentrics World's free calendar popup。我認爲它具有您所描述的所有功能,並且已經構建完成。

+1

我正在爲我的公司構建一套完整的控件。這只是另外50個人中的一個。我爲了爲公司節省開支,並確保它們是開源的,完整的文檔,並且相對容易修改。 – Jonathan 2009-11-12 17:09:14