Я пытаюсь получить CustomValidator для вызова метода сервера (это контрольная сумма, я думаю, что это правильно, но, как вы увидите, я не могу сказать), но она никогда не называется, Я могу ввести что-либо в текстовое поле, и сообщение об ошибке никогда не появляется, и добавление точки останова в методе показывает, что он никогда не вызывается вообще неважно, что введено в текстовое поле. Нужно ли мне также проверять на стороне клиента?ASP.NET - Проверка CustomValidator
My OnServerValidate считает, что метод корректно называет мои глаза - я действительно здесь не понимаю. Помогите оценить!
ASP.Net код:
<asp:Label ID="lblPPSN" runat="server" Text="PPS number: "></asp:Label>
<asp:TextBox ID="tbxPPSN" runat="server"></asp:TextBox>
<asp:CustomValidator ID="customval_PPSN" runat="server" ErrorMessage="Please enter a valid PPSN" ControlToValidate="tbxPPSN"
OnServerValidate="customval_PPSN_ServerValidate" ForeColor="Red"></asp:CustomValidator>
С # кода:
protected void customval_PPSN_ServerValidate(object source, ServerValidateEventArgs args)
{
string checkChar = "", formatChar = "", input = tbxPPSN.Text;
bool newFormat = false;
if (input.Length > 9)
{
args.IsValid = false;
return;
}
if (input.Length == 9)
{
newFormat = true;
}
char[] PPSArray = input.ToCharArray();
Array.Reverse(PPSArray);
checkChar = PPSArray[0].ToString();
if (newFormat)
{
checkChar = PPSArray[1].ToString();
formatChar = PPSArray[0].ToString();
}
checkChar = checkChar.ToLower();
formatChar = formatChar.ToLower();
int seed = 2, PPSParsed = 0, PPSsum = 0, PPSMod = 0;
foreach (char ppschar in PPSArray)
{
if (int.TryParse(ppschar.ToString(), out PPSParsed))
{
PPSsum += PPSParsed * seed;
seed++;
}
}
if (newFormat)
{
PPSsum += Convert.ToInt32(formatChar.ToCharArray()[0] - 96) * 9;
}
PPSMod = PPSsum % 23;
if (PPSMod == 0) PPSMod = 23;
if (Convert.ToString((char) (96 + PPSMod)).ToLower() == checkChar)
{
args.IsValid = true;
return;
}
else
{
args.IsValid = false;
}
}
Хм, это выглядит действительным на первый взгляд. Вы уверены, что его не ударили? Вы отлаживаете это в Visual Studio, и если да, то можете ли вы попробовать 'System.Diagnostics.Debug.WriteLine()' в начале метода, чтобы узнать, выводит ли он что-либо в окно вывода? У вас есть какие-либо группы ValidationGroups, созданные на элементах вашей кнопки или формы, которые могут привести к игнорированию этого валидатора? Вам не нужно проверять на стороне клиента; это просто удобная опция. – trnelson