我想使用我自己的函数来验证文本框的值。这是因为其格式类似于“MMM”(例如:2014年12月)。
我正在使用AjaxControlToolkit。我看到掩码验证器为我提供了属性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
发布于 2014-03-13 09:39:04
我怀疑如果在客户端切换调试器,可能会出现javascript错误。我还怀疑您是在以"release“模式运行脚本,因此是小型化的。你可能想看看这个。要确认,可以让脚本“调试”模式(将ScriptMode切换到ScriptManager中的调试),希望它能够工作。
这是一个已知的bug,至少从2011年开始,到2013年12月发布时,Ajax工具包仍未修复。
Bug报告: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(值似乎总是被缩小为n,然而,在这个文件中出现的这个eval的5个事件中,args似乎被缩小为c、e、s和v)。
有各种各样的解决办法,没有一个真正的好办法。请参阅上面的链接,但基本上:
https://stackoverflow.com/questions/22252994
复制相似问题