在回发时,如何向验证摘要添加错误消息?

时间:2009-04-22 15:39:26

标签: asp.net validation

两个问题:

在用户点击提交时回发时,如何向验证摘要添加错误消息?

是否也可以使用内置的.net验证控件突出显示特定的文本框?

6 个答案:

答案 0 :(得分:86)

动态创建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类或样式来抑制它。
  3. 您还可以创建custom class and implement IValidator,这使您可以使用一行代码添加消息,但此方法不支持验证组。

    Per Anders Fjeldstad的建议,这是一套方便的扩展方法。

    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
    

答案 1 :(得分:47)

添加自定义验证程序并手动设置其IsValidErrorMessage属性。有点像这样:

<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;
}

答案 2 :(得分:6)

这是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;机制与他的建议相同。

答案 3 :(得分:4)

您需要做的就是创建一个自定义验证器并将其添加到页面的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 ,否则即使将自定义验证器添加到您的网页,也不会显示错误消息。而且,如果您确实得到了第二个问题的答案(突出显示文本框),请发布它!

答案 4 :(得分:2)

要在验证摘要中添加错误消息,您可以使用ValidationSummary的 EnableClientScript 属性和其他验证控件。将EnableClientScript设置为false所有这些:

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

要突出显示控件,不能使用当前控件。

但我将验证控件放在相关控件附近,并将 Text 属性设置为“*”。然后,如果验证失败,则显示控制失败。

也许您可以使用自定义验证程序突出显示失败的控件。但是你应该编写自己的实现。

答案 5 :(得分:0)

这是上述答案的一个版本,它是 ValidationSummary 的扩展方法,它负责验证组 ID。

public static void AddCustomMessage(this ValidationSummary summaryControl, string message)
{
    summaryControl.Page.Validators.Add(new CustomValidator {
        ValidationGroup = summaryControl.ValidationGroup,
        ErrorMessage = message,
        IsValid = false
    });
}