0

我想使用我自己的函数来验证文本框的值。这是因为格式类似于“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>

我的警报永远不会出现。

问题是我做错了什么,或者我要改变什么才能让 clientvalidationfunction 被调用?

范围内

4

1 回答 1

0

如果您在客户端切换调试器,我怀疑您可能会遇到 javascript 错误。我还怀疑您正在以“发布”模式运行脚本,因此已缩小。你可能想检查一下。为了确认,将脚本设为“调试”模式(在 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);");

可以看到,eval语句里面的字符串里面的“value”和“args”并没有被触及,而是在别处分别改成了n和s(value似乎总是被缩小为n,然而,args似乎是在此文件中此 eval 的 5 次出现中缩小为 c、e、s 和 v)。

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

  • 仅对此扩展器使用调试/完整/非缩小版本
  • vitor_canova 使用闭包(我没有测试过这个)
  • 我预先用源代码构建了我自己的 AjaxControlToolkit 并在那里修复了缩小版本,但是该方法不再适用于最新版本,所以我正在尝试其他方法......
于 2014-03-13T09:39:04.897 回答