На обратной передаче, как я могу добавить сообщение об ошибке в сводку проверки? - PullRequest
55 голосов
/ 22 апреля 2009

Два вопроса:

При обратной передаче, когда пользователь нажимает кнопку Отправить, как я могу добавить сообщение об ошибке в сводку проверки?

Можно ли также выделить конкретное текстовое поле с помощью встроенных средств проверки правильности .net?

Ответы [ 5 ]

86 голосов
/ 15 сентября 2010

Динамически создайте элемент управления CustomValidator и добавьте его непосредственно в коллекцию Page.Validators.

Dim err As New CustomValidator
err.ValidationGroup = "MyGroup"
err.IsValid = False
err.ErrorMessage = "The password is invalid"
Page.Validators.Add(err)

В отличие от добавления CustomValidator к разметке, этот метод позволяет добавлять любое количество произвольных сообщений об ошибках на основе бизнес-логики на стороне сервера.

Обратите внимание, что вы также можете добавить его на страницу напрямую, но есть несколько правил, которым нужно следовать:

  1. Необходимо добавить элемент управления в тот же контейнер именования, что и элементы управления группы проверки.
  2. Если вы не хотите, чтобы сообщение проверки появлялось в произвольной позиции на странице, вам нужно будет либо добавить валидатор в определенный контейнер, либо вам придется подавить его, используя класс или стиль CSS. *

Вы также можете создать пользовательский класс и реализовать IValidator , который позволяет добавлять сообщение одной строкой кода, но этот метод не поддерживает группы проверки.

Согласно предложению Андерса Фьелдстада, вот набор удобных методов расширения.

Imports Microsoft.VisualBasic
Imports System.Runtime.CompilerServices

Public Module PageExtensions

    <Extension()> _
    Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String)
        p.AddValidationError(errorMessage, String.Empty)
    End Sub

    <Extension()> _
    Public Sub AddValidationError(ByVal p As System.Web.UI.Page, ByVal errorMessage As String, ByVal validationGroup As String)
        Dim err As New CustomValidator
        err.ValidationGroup = validationGroup
        err.ErrorMessage = errorMessage
        err.IsValid = False
        p.Validators.Add(err)
    End Sub

End Module
47 голосов
/ 22 апреля 2009

Добавьте пользовательский валидатор и вручную установите его свойства IsValid и ErrorMessage. Вроде как это:

<asp:panel ID="ErrorsPanel" runat="server" CssClass="ErrorSummary">
    <asp:CustomValidator id="CustomValidator1" runat="server" 
        Display="None" EnableClientScript="False"></asp:CustomValidator>
    <asp:ValidationSummary id="ErrorSummary" runat="server" 
        HeaderText="Errors occurred:"></asp:ValidationSummary>
</asp:panel>

В коде позади:

//
// Update the database with the changes
//
string ErrorDetails;
if (!Db.Update(out ErrorDetails))
{
    CustomValidator1.IsValid = false;
    CustomValidator1.ErrorMessage = ErrorDetails;
}
6 голосов
/ 01 августа 2013

Вот небольшое дополнение к хорошей идее от NightOwl888:

public class ValidationError : CustomValidator
{
    public ValidationError(string group, string msg)
        : base()
    {
        base.ValidationGroup = group;
        base.ErrorMessage = msg;
        base.IsValid = false;
    }
}

public static class PageExtensions
{
    public static void ErrorMessage(this Page page, string group, string msg)
    {
        page.Validators.Add(new ValidationError(group, msg));
    }
}

Если вы хотите выдать сообщение об ошибке, просто позвоните Page.ErrorMessage; механизм такой же, как он предложил.

4 голосов
/ 07 ноября 2012

Ну, все, что вам нужно сделать, - это создать собственный валидатор и добавлять его в коллекцию валидаторов на своей странице, когда возникает условие для этого.

CustomValidator cv = new CustomValidator();

if(condition)
{
cv.IsValid = false;
cv.ErrorMessage = "This Catalog Data already exists.";
cv.ValidationGroup = "InputList";
this.Page.Validators.Add(cv);
}

ПРИМЕЧАНИЕ : не забудьте указать ValidationGroup , иначе сообщение об ошибке не будет отображаться, несмотря на добавление пользовательского валидатора на страницу. И да, если вы получите ответ на второй вопрос ( выделение текста ), отправьте его!

2 голосов
/ 22 апреля 2009

Чтобы добавить сообщение об ошибке в сводку проверки, вы можете использовать EnableClientScript свойство ValidationSummary и другие элементы управления проверки. Установите для EnableClientScript значение false для всех из них:

<asp:ValidationSummary
HeaderText="You must enter a value in the following fields :"
DisplayMode="BulletList"
EnableClientScript="false"
runat="server"/>

Для выделения элемента управления нет, это невозможно с текущими элементами управления.

Но я поставил свои элементы проверки рядом со связанными элементами управления и установил их свойство Text как "*". Затем, если проверка не пройдена, она появляется рядом с ошибкой управления.

Может быть, вы можете использовать пользовательский валидатор, чтобы выделить неисправный элемент управления. Но вы должны написать свою собственную реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...