Попробуйте использовать свойство ValidationGroup для всех ваших валидаторов и ValidationSummary.
РЕДАКТИРОВАТЬ: Другой возможностью может быть код проверки сервера
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
}
БОЛЬШЕ: Если вы не хотите выполнять проверку на стороне клиента, попробуйте этот трюк, чтобы отобразить предупреждение. Внесите это изменение в метод 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>");
}
}