Я пишу элемент управления 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. Если я справлюсь, почему это решит проблему. Разочарование.
Можете ли вы добавить фрагмент кода, где создан требуемый тег span? – David
Вот что я говорю. BaseValidator обрабатывает рендеринг тега SPAN. Мне не нужно переопределять RenderChildControls, как обычно, при создании составных элементов управления. Тег SPAN отображается по умолчанию, и мне не нужно изменять выходной HTML. – Jonathan