У меня есть настраиваемая функция проверки в JavaScript в пользовательском элементе управления на веб-сайте .Net 2.0, которая проверяет, не превышает ли уплаченная плата причитающуюся сумму.
Я поместил код валидатора в файл ascx
, и я также попытался использовать Page.ClientScript.RegisterClientScriptBlock()
, и в обоих случаях срабатывает проверка, но не могу найти функцию JavaScript.
В консоли ошибок Firefox выводится "feeAmountCheck is not defined"
. Вот функция (это было взято непосредственно из firefox-> view source)
<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>
Есть идеи, почему функция не найдена? Как я могу исправить это, не добавляя функцию на мою главную страницу или страницу потребления?
Когда вы используете .Net 2.0 и Ajax - вы должны использовать:
ScriptManager.RegisterClientScriptBlock
Он будет работать лучше в средах Ajax, чем в старой версии Page.ClientScript.
Попробуйте изменить имена аргументов на sender
и args
. И после того, как он заработает, переключите вызов на ScriptManager.RegisterClientScriptBlock
, независимо от использования AJAX.
Хотя я все еще хотел бы получить ответ на вопрос, почему мой javascript не распознается, решение, которое я нашел тем временем (и должно было быть сделано в первую очередь), заключается в использовании Asp:CompareValidator
вместо Asp:CustomValidator
.
Также вы можете использовать:
var amountDue = document.getElementById('<%=YourControlName.ClientID%>');
Это автоматически разрешит идентификатор клиента для элемента, и вам не придется выяснять, что он называется 'ctl00_footerContentHolder_Fees1_FeeDue'
.