我試圖讓一個CustomValidator調用一個服務器方法(這是一個校驗和,我認爲它是正確的,但你會看到我無法真正知道),但它永遠不會被調用,我可以在文本框中輸入任何內容,並且從不出現錯誤消息,並且在該方法中添加一個斷點表明它根本不會被調用,無論文本框中輸入了什麼內容。我是否也需要客戶端驗證?ASP.NET - 驗證自定義驗證器
我的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或表單元素可能會導致這個驗證器被忽略?你不應該需要客戶端驗證;這只是一個方便的選擇。 – trnelson 2014-11-01 14:46:54