Два вопроса:
В случае обратной передачи, когда пользователь нажимает кнопку отправки, как я могу добавить сообщение об ошибке в сводку проверки?
Можно ли также выделить конкретное текстовое поле, используя встроенные средства проверки .net?
Два вопроса:
В случае обратной передачи, когда пользователь нажимает кнопку отправки, как я могу добавить сообщение об ошибке в сводку проверки?
Можно ли также выделить конкретное текстовое поле, используя встроенные средства проверки .net?
Динамически создайте элемент управления 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 к разметке, этот метод позволяет добавлять любое количество произвольных сообщений об ошибках на основе бизнес-логики на стороне сервера.
Обратите внимание, что вы также можете добавить его на страницу напрямую, но есть несколько правил:
Вы также можете создать настраиваемый класс и реализовать 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
Добавить пользовательский валидатор и вручную установить его свойства 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;
}
Здесь небольшое расширение хорошей идеи от 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
; механизм такой же, как он предполагал.
Ну, все, что вам нужно сделать, это создать 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, если вы получите ответ на свой второй вопрос (выделив текстовое поле), опубликуйте его!
Чтобы добавить сообщение об ошибке в сводку проверки, вы можете использовать свойство EnableClientScript свойства ValidationSummary и других элементов проверки. Установите EnableClientScript для всех них:
<asp:ValidationSummary
HeaderText="You must enter a value in the following fields :"
DisplayMode="BulletList"
EnableClientScript="false"
runat="server"/>
Чтобы выделить элемент управления, это невозможно с помощью текущих элементов управления.
Но я поставил свои контрольные элементы управления рядом с соответствующими элементами управления, и я установил их свойство Текст как "*". Затем, если проверка не удалась, она появляется возле отказавшего элемента управления.
Возможно, вы можете использовать специальный валидатор, чтобы выделить неудавшийся элемент управления. Но вы должны написать свою собственную реализацию.