【发布时间】:2014-11-01 14:41:19
【问题描述】:
我正在尝试让 CustomValidator 调用服务器方法(这是一个校验和,我认为它是正确的,但正如你所看到的,我真的无法判断)但它从未被调用,我可以在文本中输入任何内容框和错误消息永远不会出现,并且在方法中添加断点表明它根本不会被调用,无论在文本框中输入什么。我还需要客户端验证吗?
在我看来,我的 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>
c# 代码隐藏:
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?您不需要客户端验证;这只是一个方便的选择。
标签: c# asp.net customvalidator