Сборка серверного элемента управления ASP.NET - валидатор - PullRequest
0 голосов
/ 12 ноября 2009

Я пишу элемент управления DateValidator, чтобы он работал как валидатор всех типов для дат.

Он будет функционировать как обязательный валидатор, мин / макс валидатор и валидатор диапазона для сравнения дат на стороне клиента.

В общем, я написал и он работает: на странице ASPX.

По какой-то причине при добавлении его в пользовательский элемент управления ASCX для использования в качестве шаблона он не отображает обязательный тег <span> и, таким образом, генерирует нулевую ссылку JavaScript при проверке, чтобы убедиться, что элемент управления существует до продолжения проверки .

Мой класс наследует BaseValidator и поэтому не override RenderChildControls, поскольку мне не нужно изменять вывод. Чтобы добавить свой пользовательский javascript, я использую метод OnPreRender для RegisterExpandoAttributes элемента управления, но он не может быть запущен в ASCX, так как элемент управления (тег span) никогда не отображается.

Кто-нибудь сталкивался с этим, и если да, что вы сделали, чтобы это исправить?

EDIT:

Хорошо, еще через 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>

Но в пользовательском элементе управления ASCX в ASPX:

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

Как видите, распознается только Сводка проверки, а не мой класс CustomValidator, унаследованный от BaseValidator. Если я могу сгладить, почему это решит проблему. Разочарование.

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

Возможно, вам следует рассмотреть возможность использования бесплатного всплывающего календаря Excentrics World . Я думаю, что он обладает всеми функциями, которые вы описали, и он уже построен.

0 голосов
/ 12 ноября 2009

Если вы используете шаблон , вызовите метод InstantiateIn () ....

...