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