2009-11-12 3 views
0

Я пишу элемент управления DateValidator для работы в качестве валидатора всех типов для дат.ASP.NET Custom Server Control Build - Validator

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

В целом, у меня есть это письмо, и оно функционирует: на странице 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. Если я справлюсь, почему это решит проблему. Разочарование.

+1

Можете ли вы добавить фрагмент кода, где создан требуемый тег span? – David

+0

Вот что я говорю. BaseValidator обрабатывает рендеринг тега SPAN. Мне не нужно переопределять RenderChildControls, как обычно, при создании составных элементов управления. Тег SPAN отображается по умолчанию, и мне не нужно изменять выходной HTML. – Jonathan

ответ

0

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

+0

Элемент управления ASCX используется в качестве шаблона, который можно повторно использовать снова и снова. Он не реализует ITemplate. – Jonathan

1

Может быть, вы должны рассмотреть возможность использования Excentrics World's free calendar popup. Я думаю, что у него есть все функциональные возможности, которые вы описали, и они уже построены.

+1

Я строю полный набор элементов управления для своей компании. Это всего лишь около 50 других. Я строю их, чтобы сэкономить деньги для компании и гарантировать, что они с открытым исходным кодом, полностью документированы и относительно легко модифицируются. – Jonathan