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 с исходным кодом и исправил там уменьшенную версию, но этот метод больше не работает с последней версией, поэтому я пытаюсь что-то другое, как мы говорим...