ASP.Net 自定义客户端验证
Posted
技术标签:
【中文标题】ASP.Net 自定义客户端验证【英文标题】:ASP.Net Custom Client-Side Validation 【发布时间】:2010-09-05 07:25:53 【问题描述】:我在 .Net 2.0 网站的用户控件中使用 javascript 自定义验证功能,用于检查支付的费用是否超过应付的费用金额。
我已将验证器代码放在ascx
文件中,我也尝试使用Page.ClientScript.RegisterClientScriptBlock()
,在这两种情况下验证都会触发,但找不到 JavaScript 函数。
Firefox 错误控制台的输出是"feeAmountCheck is not defined"
。这是函数(这是直接取自firefox->查看源代码)
<script type="text/javascript">
function feeAmountCheck(source, arguments)
var amountDue = document.getElementById('ctl00_footerContentHolder_Fees1_FeeDue');
var amountPaid = document.getElementById('ctl00_footerContentHolder_Fees1_FeePaid');
if (amountDue.value > 0 && amountDue >= amountPaid)
arguments.IsValid = true;
else
arguments.IsValid = false;
return arguments;
</script>
关于为什么找不到该功能的任何想法?如何在无需将功能添加到我的母版页或使用页的情况下解决此问题?
【问题讨论】:
【参考方案1】:尝试将参数名称更改为 sender
和 args
。并且,在它工作后,将呼叫切换到 ScriptManager.RegisterClientScriptBlock
,无论使用何种 AJAX。
【讨论】:
【参考方案2】:当您使用 .Net 2.0 和 Ajax - 您应该使用:
ScriptManager.RegisterClientScriptBlock
它在 Ajax 环境中会比旧的 Page.ClientScript 版本更好地工作
【讨论】:
【参考方案3】:你也可以使用:
var amountDue = document.getElementById('<%=YourControlName.ClientID%>');
这将自动解析该元素的客户端 ID,而您无需弄清楚它的名称是 'ctl00_footerContentHolder_Fees1_FeeDue'
。
【讨论】:
【参考方案4】:虽然我仍然想知道为什么我的 javascript 没有被识别,但我在此期间找到的解决方案(并且应该首先完成)是使用 Asp:CompareValidator
而不是 Asp:CustomValidator
.
【讨论】:
以上是关于ASP.Net 自定义客户端验证的主要内容,如果未能解决你的问题,请参考以下文章
剃须刀页面上自定义验证属性的 ASP.NET Core 客户端验证
在 Asp.net Core MVC 中定义自定义客户端验证规则