2009-04-22 85 views

回答

2

要在驗證摘要上添加錯誤消息,您可以使用EnableClientScript ValidationSummary屬性和其他驗證控件。將EnableClientScript設置爲全部爲false:

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

爲了突出顯示某個控件,不可能使用當前控件。

但我把我的驗證控件附近的相關控件,我把他們的文本屬性設置爲「*」。然後如果驗證失敗,它會出現在失敗的控件附近。

也許您可以使用自定義驗證程序來突出顯示失敗的控件。但是你應該寫你自己的實現。

+0

我想通過代碼隱藏在postack上添加錯誤消息。 – Blankman 2009-04-22 15:44:38

45

添加一個自定義驗證程序並手動將其設置爲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> 

在後面的代碼:

+4

這裏的一個陷阱是,如果您的驗證摘要控件指定了一個ValidationGroup,那麼您還需要向您的CustomValidator添加一個ValidationGroup屬性,以確保在需要時/顯示錯誤消息。也許只是常識,但它偶爾會把我抓出來。 – 2010-10-28 20:52:20

80

動態創建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類或樣式對其進行壓縮。

您也可以創建一個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 
+4

+1用於啓用任意數量的錯誤消息。另外,上面的代碼很容易被分解成System.Web.UI.Page或System.Web.UI.ValidatorCollection的擴展方法,它可以通過類似Page.AddValiationError(「MyValidationGroup」,「Some error消息「) – 2011-06-30 13:52:13

+0

我發現一旦我以這種方式添加了驗證器(並將它們添加到頁面上的控件中,以便我可以控制它們出現的位置),如果我沒有設置」ControlToValidate「屬性,那麼我就可以不會改變使頁面無效的事情 - 所以我再也不能提交頁面。設置該屬性爲我解決了它。 – 2015-09-25 09:19:31

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或錯誤信息不會顯示自定義驗證的inspite被添加到您的網頁。而且,如果你確實得到了你的第二個問題的答案(突出顯示文本框),請發佈!

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;該機制與他所建議的相同。

相關問題