[英]Validating a series of asp.net textboxes with CustomValidator and an unique function
[英]ASP.NET - Validating a CustomValidator
我正在嘗試讓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;
}
}
如果您從不回發到服務器,則不會調用服務器端驗證。 您可能需要進行一些客戶端驗證,因此您的用戶無需提交表單即可獲得驗證結果。
此MSDN文章提供了同時使用服務器端和客戶端驗證的示例 : CustomValidator示例
我使用了您的標記和代碼隱藏功能,它似乎可以正常工作。
標記:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Val.aspx.cs" Inherits="CustomValidatorExample.Val" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<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>
<asp:Button runat="server" ID="button1" Text="Validate" OnClick="button1_Click" />
</div>
</form>
</body>
</html>
代碼隱藏:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomValidatorExample
{
public partial class Val : System.Web.UI.Page
{
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;
}
}
protected void button1_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
Response.Write("Valid");
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.