ValidationSummary не отображает сообщение об ошибке на стороне сервера после назначения группы

У меня есть элемент управления ValidationSummary, который изначально работал со всеми моими элементами управления валидацией, однако позже, когда я назначил свои элементы валидации группам, т. Е. Дал им имя группы в ValidationGroups атрибут, он, кажется, не показывает сообщения об ошибках элементов управления проверки, которая не проходит проверку на стороне сервера. Я использую звонок Page.Validate() проверить все элементы управления на стороне сервера. Кто-нибудь сталкивался с этим вопросом раньше?

Я немного поэкспериментировал с простой страницей и заметил, что это происходит, когда вы назначаете CustomerValidator группе, но проблема исчезает без группы.

Вот Start.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Start.aspx.cs" Inherits="WebApplication3.Start" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" CausesValidation ="true" OnClick="Button1_Click" style="height: 26px"/>
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1" ValidationGroup="Group1" Display="None" ErrorMessage="RequiredFieldValidator1"></asp:RequiredFieldValidator>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TextBox2" ValidationGroup="Group2" Display="None" ErrorMessage="RequiredFieldValidator2"></asp:RequiredFieldValidator>
        <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TextBox2" Display="None" ValidationGroup="Group2" ErrorMessage="Message for display in validation summary" OnServerValidate="cusCustom_ServerValidate"></asp:CustomValidator>
    </div>
    </form>
</body>
</html>

Вот Start.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication3
{
    public partial class Start : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void cusCustom_ServerValidate(object sender, ServerValidateEventArgs e)
        {
            e.IsValid = false;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Page.Validate();
        }
    }
}

1 ответ

Решение

Когда вы присваиваете ValidationGroups для RequiredFieldValidators и CustomValidators, вам также необходимо назначить ValidationGroup для вашего ValidationSummary, так как вы используете Display="None" (что означает, что ваши элементы управления валидацией будут отображать только свои ErrorMessage в связанных с ними элементах управления ValidationSummary).

Поскольку у вас есть Group1 и Group2, вам нужно добавить 2 элемента управления ValidationSummary, один для Group1, а другой для Group2. Как это...

<asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="Group1" />
<asp:ValidationSummary ID="ValidationSummary2" runat="server" ValidationGroup="Group2" />

Следует также отметить, что CustomValidators будут проверяться только после RequiredFieldValidators, поэтому вы не увидите сообщение об ошибке из вашего CustomValidator, пока ваши RequiredFieldValidators не пройдут проверку.

Надеюсь это поможет.

Другие вопросы по тегам