C# ASP.NET-验证CustomValidator
我试图让CustomValidator调用一个服务器方法(这是一个校验和,我认为它是正确的,但正如你所看到的,我真的说不出来),但它从未被调用过,我可以在文本框中输入任何内容,错误消息从未出现,在方法中添加断点表明,无论在文本框中输入什么,它都不会被调用。我也需要客户端验证吗 我的OnServerValidate看起来正确地调用了这个方法——我在这里真的不知所措。非常感谢您的帮助 ASP.Net代码:C# ASP.NET-验证CustomValidator,c#,asp.net,customvalidator,C#,Asp.net,Customvalidator,我试图让CustomValidator调用一个服务器方法(这是一个校验和,我认为它是正确的,但正如你所看到的,我真的说不出来),但它从未被调用过,我可以在文本框中输入任何内容,错误消息从未出现,在方法中添加断点表明,无论在文本框中输入什么,它都不会被调用。我也需要客户端验证吗 我的OnServerValidate看起来正确地调用了这个方法——我在这里真的不知所措。非常感谢您的帮助 ASP.Net代码: <asp:Label ID="lblPPSN" runat="server" Te
<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>
如果从不回发到服务器,则不会调用服务器端验证。您可能需要进行一些客户端验证,这样您的用户就不需要提交表单来获得验证结果 本MSDN文章提供了一个同时使用服务器端和客户端验证的示例: 我使用了你的标记和代码,看起来很有效 标记:
<%@ 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>
嗯,乍一看是有效的。你确定没有被击中吗?您是否正在Visual Studio中调试此功能,如果是,您是否可以尝试在方法的开头使用
System.Diagnostics.Debug.WriteLine()
,查看它是否向输出窗口输出了任何内容?您是否在按钮或表单元素上设置了任何可能导致忽略此验证器的ValidationGroup?您不应该需要客户端验证;这只是一个方便的选项。我有一个summit按钮,当单击它时,它会检查(Page.IsValid)-这不应该正确处理我想要做的事情吗?@user2966419Page.IsValid
只检查验证的结果,它不会执行验证。ServerValidate
事件处理程序将在按钮的单击
处理程序之前被调用。
<%@ 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");
}
}
}
}