首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MaskedEditValidator不调用Clientvalidationfunction

MaskedEditValidator不调用Clientvalidationfunction
EN

Stack Overflow用户
提问于 2014-03-07 14:36:50
回答 1查看 653关注 0票数 0

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

我正在使用AjaxControlToolkit。我看到掩码验证器为我提供了属性ClientValidatonFunction,就像CustomValidator所做的那样。

问题是,这个函数似乎从未被调用过。

这里是我的JavaScript-函数:

代码语言:javascript
复制
<script type="text/javascript">
  function MyFunction(sender, args) {
    alert("foo");
  }
</script>

在这里我的ASP

代码语言:javascript
复制
<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

EN

回答 1

Stack Overflow用户

发布于 2014-03-13 09:39:04

我怀疑如果在客户端切换调试器,可能会出现javascript错误。我还怀疑您是在以"release“模式运行脚本,因此是小型化的。你可能想看看这个。要确认,可以让脚本“调试”模式(将ScriptMode切换到ScriptManager中的调试),希望它能够工作。

这是一个已知的bug,至少从2011年开始,到2013年12月发布时,Ajax工具包仍未修复。

Bug报告:http://ajaxcontroltoolkit.codeplex.com/workitem/26740

这是因为调试模式/完整/非小型化版本表明:

代码语言:javascript
复制
var args = { Value:mask, IsValid:true };
eval(value.ClientValidationFunction + "(value, args);");

但是发布模式/小型化版本如下所示:

代码语言:javascript
复制
var s = { Value:mask, IsValid:true };
eval(n.ClientValidationFunction + "(value, args);");

正如您所看到的,eval语句中字符串中的"value“和" args”没有被碰过,而是在其他地方分别更改为n和s(值似乎总是被缩小为n,然而,在这个文件中出现的这个eval的5个事件中,args似乎被缩小为c、e、s和v)。

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

  • 仅对此扩展程序使用调试/完整/非小型化版本。
  • vitor_canova使用闭包(我还没有测试这个)
  • 我假设用源代码构建了我自己的AjaxControlToolkit,并在那里修复了小型化的版本,但是这个方法不再适用于最新的版本,所以在我们说话的时候,我正在尝试其他的方法。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22252994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档