2011-03-07 54 views
1

想象一下聯繫表單的情況,即要收集數據並通過電子郵件將數據進一步傳輸到適當的地址。其中一個重要字段要求提供電子郵件地址,這對於回調回撥非常重要。手動顯示字段驗證程序(ASP.NET/C#)

所以說我使用RequiredFieldValidator檢查郵件地址字段中的東西,任何東西的輸入;進一步檢查代碼將確定提供的郵件地址是否可用。

鑑於這兩項檢查本質上是驗證,我只想重用我的代碼隱藏中的RequiredFieldValidator; 這可能嗎?

例如,一些簡單的:

MyValidator.Show(); 
return; 

我過去做的是增加一個Label的形式爲好,而只使用了類似的策略,僅使控制可見根據需要並返回。理想情況下,我想擺脫這一切,只需使用一個控件輸出我的錯誤消息。

對於當前代碼的想法,下面是一個骨骼上市,其中,即使是這樣,在其整體的概念:

內頁:

<asp:TextBox runat="server" ID="MailAddressTextBox" /> 

<asp:RequiredFieldValidator runat="server" ID="MailAddressValidator" ErrorMessage="Enter a valid mail address" ControlToValidate="MailAddressTextBox" /> 

<asp:Label runat="server" ID="MailAddressError" Text="Enter a valid mail address" Visible="false" /> 

而且代碼 - 中背後:

MailAddress enquirerMail; 
try 
{ 
    enquirerMail = new MailAddress(MailAddressTextBox.Text); 
} 
catch 
{ 
    MailAddressError.Visible = true; 
    return; 
} 

與隱藏/辦法顯示錯誤的標籤,較明顯的額外控制的其他的陷阱,是他們知名度的維護,也是一個標籤每個錯誤或消息列表以及代碼更改顯示。至少在這個特定的例子中,多個驗證器是我想要避免的,一個RegularExpressionValidator不會在這裏削減它,因爲我們都知道只選擇解析郵件地址的'最佳'正則表達式本身可以是一個壯舉,也可能包含比實際頁面內容+標記更多的字符。

如果你需要,我反感正則表達式的另一個原因是,最終我不得不實現上面的try/catch驗證,因爲即使是「驗證過的」地址也可能導致構造函數失敗。

所以,只是重申:我可以激活/重用我的驗證碼從代碼隱藏嗎?

回答

3

我真的認爲,如果你正在驗證兩件事情(事實上該字段不是空的以及它是一個有效地址的事實),那麼你應該有兩個驗證器。

然而,要回答你的問題,你可以這樣做:

MailAddressValidator.ErrorMessage = "Invalid email address"; 
MailAddressValidator.IsValid = false; 
+0

砸,謝謝。 – 2011-03-07 14:14:41

1

如果你真的想要避免使用多個驗證程序(我可以理解爲什麼,產生「在線」的錯誤信息不會與兩個或兩個以上的驗證控件整齊),我建議使用一個單一的custom validator

這意味着您可以編寫自己的驗證代碼(包括用戶未提供任何內容的情況以及提供了無效電子郵件地址的情況),並對所呈現的錯誤消息進行精確控制。