MaskedEditValidator не вызывает функцию проверки клиента

Я хочу использовать свою собственную функцию для проверки значения текстового поля. Это потому, что формат похож на "МММ ГГГГ" (например, декабрь 2014).

Я использую AjaxControlToolkit. Я видел, что maskededitvalidator предоставляет мне свойство ClientValidatonFunction, как, например, CustomValidator.

Проблема в том, что кажется, что эта функция никогда не вызывается.

Вот моя маленькая JavaScript-функция:

<script type="text/javascript">
  function MyFunction(sender, args) {
    alert("foo");
  }
</script>

Вот мой ASP

<asp:textbox id="StartTextBox" cssclass="textbox"
  style="width: 60px;" validationgroup="Dialog"
  causesvalidation="false" runat="server">
</asp:textbox>
<ajaxtoolkit:calendarextender id="StartCalendarExtender"
  targetcontrolid="StartTextBox" format="MMM yyyy"
  OnClientHidden="onCalendarHidden_StartTextBox"
  OnClientShown="onCalendarShown_StartTextBox"
  BehaviorID="calendar_StartTextBox" runat="server">
</ajaxtoolkit:calendarextender>
<ajaxtoolkit:maskededitextender id="StartMaskedEditExtender"
  targetcontrolid="StartTextBox" enabled="false"
  mask="??? 9999" masktype="Date" oninvalidcssclass="textbox_invalid"
  runat="server">
</ajaxtoolkit:maskededitextender>
<ajaxtoolkit:maskededitvalidator id="StartMaskedEditValidator"
  controlextender="StartMaskedEditExtender" display="Dynamic"
  controltovalidate="StartTextBox"
  clientvalidationfunction="MyClientFunction" enableclientscript="true"
  enabled="true" isvalidempty="false" runat="server">
</ajaxtoolkit:maskededitvalidator>

Моя тревога никогда не появляется.

Вопрос в том, что я делаю не так, или что мне нужно изменить, чтобы вызвать функцию проверки клиента?

AoE

1 ответ

Я подозреваю, что у вас может быть ошибка javascript, если вы переключаете отладчик на стороне клиента. Я также подозреваю, что вы работаете со сценариями в режиме "релиз", поэтому минимизированы. Вы можете проверить это. Для подтверждения сделайте сценарии в режиме "отладки" (переключите ScriptMode на Debug в вашем ScriptManager) и, надеюсь, он будет работать.

Это известная ошибка, по крайней мере, с 2011 года, до сих пор не исправленная в Ajax Toolkit на декабрь 2013 года.

Отчет об ошибке: http://ajaxcontroltoolkit.codeplex.com/workitem/26740

Это потому, что режим отладки / полная / не минимизированная версия говорит следующее:

var args = { Value:mask, IsValid:true };
eval(value.ClientValidationFunction + "(value, args);");

Но режим выпуска / минимизированная версия говорит примерно так:

var s = { Value:mask, IsValid:true };
eval(n.ClientValidationFunction + "(value, args);");

Как вы можете видеть, "value" и "args" внутри строки внутри оператора eval не были затронуты, но были изменены на n и s соответственно в других местах (значение всегда кажется уменьшенным до n, однако args, кажется, уменьшено до c, e, s и v в 5 экземплярах этого eval в этом файле).

Существуют различные обходные пути, но ни один из них не очень хорош. Смотрите ссылку выше, но в основном:

  • Для этого расширителя используйте только версию debug/full/non-minifed.
  • vitor_canova использует замыкания (я не проверял это)
  • я предварительно создал свой собственный AjaxControlToolkit с исходным кодом и исправил там уменьшенную версию, но этот метод больше не работает с последней версией, поэтому я пытаюсь что-то другое, как мы говорим...
Другие вопросы по тегам