Подтвердить что ты не робот

В ответ на вопрос, как добавить сообщение об ошибке в сводку проверки?

Два вопроса:

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

Можно ли также выделить конкретное текстовое поле, используя встроенные средства проверки .net?

4b9b3361

Ответ 1

Динамически создайте элемент управления 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 к разметке, этот метод позволяет добавлять любое количество произвольных сообщений об ошибках на основе бизнес-логики на стороне сервера.

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

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

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

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

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

Ответ 2

Добавить пользовательский валидатор и вручную установить его свойства 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;
}

Ответ 3

Здесь небольшое расширение хорошей идеи от 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

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

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, или сообщение об ошибке не будет отображаться, пока пользовательский валидатор не будет добавлен на вашу страницу. И ya, если вы получите ответ на свой второй вопрос (выделив текстовое поле), опубликуйте его!

Ответ 5

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

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

Чтобы выделить элемент управления, это невозможно с помощью текущих элементов управления.

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

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