MaskedEditValidator不调用Clientvalidationfunction

时间:2014-03-07 14:36:51

标签: javascript ajax ajaxcontroltoolkit client-side-validation maskededitvalidator

我想使用自己的函数来验证文本框的值。这是因为格式类似于'MMM YYYY'(例如:2014年12月)。

我正在使用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>

我的警报永远不会发生。

问题是我做错了什么或者我要改变什么来调用clientvalidation函数?

卓越学科领域

1 个答案:

答案 0 :(得分:0)

我怀疑如果在客户端切换调试器,可能会出现javascript错误。我还怀疑你正在使用&#34;发布&#34;中的脚本。模式,因此缩小。你可能想检查一下。要确认,请编写脚本&#34; debug&#34;模式(在ScriptManager中将ScriptMode切换为Debug),希望它能正常工作。

至少自2011年以来,这是一个已知的错误,截至2013年12月发布时,仍未在Ajax Toolkit中修复。

错误报告: 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);");

如你所见,&#34;价值&#34;和&#34; args&#34; eval语句中的字符串内部没有被触及,但是已经分别在其他地方被改为n和s(值似乎总是被缩小为n,但是,args似乎被缩小为c,e,s和v在5中此文件中出现此eval)。

有各种解决方法,没有一个非常好。请参阅上面的链接,但基本上是:

  • 仅对此扩展程序使用debug / full / non-minifed版本
  • vitor_canova使用闭包(我没有测试过这个)
  • 我预先用源代码构建了我自己的AjaxControlToolkit,然后在那里修改了缩小版本,但是这个方法不再适用于最新版本了,所以我在说话的时候尝试别的东西... < / LI>