gpt4 book ai didi

asp.net - 使CustomValidator与ValidationSummary消息框配合使用的优雅方法

转载 作者:行者123 更新时间:2023-12-03 12:44:03 26 4
gpt4 key购买 nike

我以前曾遇到过这个问题,但从未完全解决过。我有一个包含多个验证器和一个CustomValidator的表单。

<asp:Label ID="lblMemberNum" runat="server" Text="Membership #:" CssClass="LabelMedium"  ></asp:Label>
<asp:TextBox ID="txtMemberNum" runat="server" CssClass="TextBox" ></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvMemberNum" SetFocusOnError="True" runat="server"
ControlToValidate="txtMemberNum" ErrorMessage="[ Membership # ] is required"
CssClass="ValidationMessage" Display="Dynamic" >*</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="revMemberNum" Display="Dynamic" runat="server"
ControlToValidate="txtMemberNum" CssClass="ValidationMessage"
ErrorMessage="[ Membership # ] can only contain letters"
ValidationExpression="^([a-zA-Z\d]+)$" >*</asp:RegularExpressionValidator>
<asp:CustomValidator ID="cvMemberNum" runat="server"
CssClass="ValidationMessage" Display="Dynamic"
ControlToValidate="txtMemberNum" ValidateEmptyText="false"
OnServerValidate="cvMemberNum_Validate"
ErrorMessage="This membership number is already registered">*</asp:CustomValidator>

<asp:ValidationSummary ID="ValidationSummary1" runat="server"
CssClass="ValidationMessage"
ShowMessageBox="True" ShowSummary="False" />


在服务器端:

protected void cvMemberNum_Validate(object source, ServerValidateEventArgs args)
{
try
{
args.IsValid = (!CampaignRegistration.IsMemberRegistered(args.Value));
}
catch
{
args.IsValid = false;
}
}


我的问题是:ValidationSummary永远不会显示来自CustomValidator的消息。这个问题已经在几个地方问过,但是我还没有看到满意的答案。

最佳答案

尝试在所有验证程序和ValidationSummary中使用ValidationGroup属性。

编辑:另一种可能是服务器验证码

args.IsValid = (!CampaignRegistration.IsMemberRegistered(args.Value));


如果 CampaignRegistration.IsMemberRegistered(args.Value)返回false,则“!”使它真实,因此使其有效。我认为您应该摆脱“!”如下:

args.IsValid = CampaignRegistration.IsMemberRegistered(args.Value);


更新:为了使ValidationSummary在消息框中显示您的自定义验证程序消息,您需要具有 ClientValidationFunction代码。如果只需要显示摘要而不显示弹出窗口,则不需要。

<asp:CustomValidator ID="cvMemberNum" runat="server" 
CssClass="ValidationMessage" Display="Dynamic"
ControlToValidate="txtMemberNum" ValidateEmptyText="false"
OnServerValidate="cvMemberNum_Validate"
ClientValidationFunction = "ClientValidate"
ErrorMessage="This membership number is already registered">*</asp:CustomValidator>
//JavaScript Code.
function ClientValidate(source, args)
{
args.IsValid = false; //you need to add validation logic here
}


更多:如果您不想执行ClientSide验证,请尝试以下技巧以显示警报。对您的CustomValidator ServerValidate方法进行此更改:

protected void cvMemberNum_Validate(object source, ServerValidateEventArgs args)
{
bool isValid = true;
try
{
isValid = (!CampaignRegistration.IsMemberRegistered(args.Value));
}
catch
{
isValid = false;
}
args.IsValid = isValid;

if(!isValid)
{
if(!Page.IsClientScriptBlockRegistered("CustomValidation"))
Page.RegisterClientScriptBlock("CustomValidation", "<script>alert('This membership number is already registered');</script>");

}

}

关于asp.net - 使CustomValidator与ValidationSummary消息框配合使用的优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/811734/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com